
Hello, I am working on a patch for Boost.Python and I need to find a portable way of detecting if a static member function (with fixed name and signature) is declared in a class. So far I have tried the following (testing if "static int *get_int()" is declared): typedef char yes_type; typedef struct {char a[2]; } no_type; template<int * (*f)()> struct test_get_int1 { }; template<class T> yes_type get_int_tester(test_get_int1<&T::get_int>*); template<class T> no_type get_int_tester(...); template<class T> struct test_get_int_base { BOOST_STATIC_CONSTANT(bool, value= (sizeof(get_int_tester<T>(0)) == sizeof(yes_type))); }; template<class T> struct test_get_int : boost::mpl::bool_<test_get_int_base<T>::value> { }; this works on some compilers : msvc7.1, msvc8.0, gcc3.4, gcc4.1.0, gcc4.1.2 but not on gcc3.2: when get_int is not present it complains "get_int is not member of type..." and strangely not on gcc4.1.1: when get_int is present it complains "static int *T::get_int cannot be a template parameter because is not of external linkage" I have not tried other compilers but I expect more of the same problems. Can anyone suggest a better way of doing this? Thanks in advance, Nikolay Mladenov