signal_connect: Simplify ambiguity removal when compiling with MSVC
authorRémi Hérilier <[email protected]>
Wed, 4 Sep 2024 09:20:26 +0000 (4 11:20 +0200)
committerKjell Ahlstedt <[email protected]>
Thu, 5 Sep 2024 08:18:21 +0000 (5 10:18 +0200)
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.

sigc++/signal_connect.h
tests/test_signal_connect.cc

index d0aacb0..9bfdb0a 100644 (file)
@@ -53,7 +53,7 @@ signal_connect(signal<T_return(T_arg...)>& signal, T_return (*fun)(T_arg...))
  */
 template<typename T_return, typename T_obj, typename... T_arg>
 inline connection
-signal_connect(signal<T_return(T_arg...)>& signal, /**/ T_obj& obj, T_return (T_obj::*fun)(T_arg...))
+signal_connect(signal<T_return(T_arg...)>& signal, T_obj& obj, T_return (T_obj::*fun)(T_arg...))
 {
   return signal.connect(mem_fun<T_return, T_obj, T_obj, T_arg...>(obj, fun));
 }
@@ -67,26 +67,12 @@ signal_connect(signal<T_return(T_arg...)>& signal, /**/ T_obj& obj, T_return (T_
  * @newin{3,8}
  * @ingroup signal
  */
-#ifdef SIGC_MSC
-/* MSVC needs to distinguish object's class and method's class (using the
- * template parameter T_obj2) to avoid raising error C2672 (no matching
- * overloaded function found) when signal_connect(...) is called with a
- * const object.
- */
-template<typename T_return, typename T_obj, typename T_obj2, typename... T_arg>
-inline connection
-signal_connect(signal<T_return(T_arg...)>& signal, /*const*/ T_obj& obj, T_return (T_obj2::*fun)(T_arg...) const)
-{
-  return signal.connect(mem_fun<T_return, T_obj, T_obj, T_arg...>(obj, fun));
-}
-#else
 template<typename T_return, typename T_obj, typename... T_arg>
 inline connection
-signal_connect(signal<T_return(T_arg...)>& signal, /*const*/ T_obj& obj, T_return (T_obj::*fun)(T_arg...) const)
+signal_connect(signal<T_return(T_arg...)>& signal, const T_obj& obj, T_return (T_obj::*fun)(T_arg...) const)
 {
-  return signal.connect(mem_fun<T_return, T_obj, T_obj, T_arg...>(obj, fun));
+  return signal.connect(mem_fun<T_return, const T_obj, const T_obj, T_arg...>(obj, fun));
 }
-#endif
 
 } /* namespace sigc */
 
index 19e3c0a..ef4e104 100644 (file)
@@ -48,29 +48,6 @@ struct foo : public sigc::trackable
   }
 };
 
-struct bar : public sigc::trackable
-{
-  void fun_nonconst(int i, int j)
-  {
-    result_stream << "bar::fun_nonconst(int " << i << ", int " << j << ")";
-  }
-
-  void fun_nonconst(int i, double j)
-  {
-    result_stream << "bar::fun_nonconst(int " << i << ", double " << j << ")";
-  }
-
-  void fun_const(int i, int j) const
-  {
-    result_stream << "bar::fun_const(int " << i << ", int " << j << ")";
-  }
-
-  void fun_const(int i, double j) const
-  {
-    result_stream << "bar::fun_const(int " << i << ", double " << j << ")";
-  }
-};
-
 void
 test_signal_connect_fun()
 {