Skip to content

Commit f36ec36

Browse files
rherilierkjellahl
authored andcommitted
signal_connect: Simplify ambiguity removal when compiling with MSVC
commented "const" in sigc::mem_fun prototypes' are meaningless. Using a "const T_obj" as argument type when the method is const void any conflict. remove useless struct in test program.
1 parent 77194f1 commit f36ec36

File tree

2 files changed

+3
-40
lines changed

2 files changed

+3
-40
lines changed

sigc++/signal_connect.h

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ signal_connect(signal<T_return(T_arg...)>& signal, T_return (*fun)(T_arg...))
5353
*/
5454
template<typename T_return, typename T_obj, typename... T_arg>
5555
inline connection
56-
signal_connect(signal<T_return(T_arg...)>& signal, /**/ T_obj& obj, T_return (T_obj::*fun)(T_arg...))
56+
signal_connect(signal<T_return(T_arg...)>& signal, T_obj& obj, T_return (T_obj::*fun)(T_arg...))
5757
{
5858
return signal.connect(mem_fun<T_return, T_obj, T_obj, T_arg...>(obj, fun));
5959
}
@@ -67,26 +67,12 @@ signal_connect(signal<T_return(T_arg...)>& signal, /**/ T_obj& obj, T_return (T_
6767
* @newin{3,8}
6868
* @ingroup signal
6969
*/
70-
#ifdef SIGC_MSC
71-
/* MSVC needs to distinguish object's class and method's class (using the
72-
* template parameter T_obj2) to avoid raising error C2672 (no matching
73-
* overloaded function found) when signal_connect(...) is called with a
74-
* const object.
75-
*/
76-
template<typename T_return, typename T_obj, typename T_obj2, typename... T_arg>
77-
inline connection
78-
signal_connect(signal<T_return(T_arg...)>& signal, /*const*/ T_obj& obj, T_return (T_obj2::*fun)(T_arg...) const)
79-
{
80-
return signal.connect(mem_fun<T_return, T_obj, T_obj, T_arg...>(obj, fun));
81-
}
82-
#else
8370
template<typename T_return, typename T_obj, typename... T_arg>
8471
inline connection
85-
signal_connect(signal<T_return(T_arg...)>& signal, /*const*/ T_obj& obj, T_return (T_obj::*fun)(T_arg...) const)
72+
signal_connect(signal<T_return(T_arg...)>& signal, const T_obj& obj, T_return (T_obj::*fun)(T_arg...) const)
8673
{
87-
return signal.connect(mem_fun<T_return, T_obj, T_obj, T_arg...>(obj, fun));
74+
return signal.connect(mem_fun<T_return, const T_obj, const T_obj, T_arg...>(obj, fun));
8875
}
89-
#endif
9076

9177
} /* namespace sigc */
9278

tests/test_signal_connect.cc

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -48,29 +48,6 @@ struct foo : public sigc::trackable
4848
}
4949
};
5050

51-
struct bar : public sigc::trackable
52-
{
53-
void fun_nonconst(int i, int j)
54-
{
55-
result_stream << "bar::fun_nonconst(int " << i << ", int " << j << ")";
56-
}
57-
58-
void fun_nonconst(int i, double j)
59-
{
60-
result_stream << "bar::fun_nonconst(int " << i << ", double " << j << ")";
61-
}
62-
63-
void fun_const(int i, int j) const
64-
{
65-
result_stream << "bar::fun_const(int " << i << ", int " << j << ")";
66-
}
67-
68-
void fun_const(int i, double j) const
69-
{
70-
result_stream << "bar::fun_const(int " << i << ", double " << j << ")";
71-
}
72-
};
73-
7451
void
7552
test_signal_connect_fun()
7653
{

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy