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)