Although, now that I think of it, creating 'void() const' is in principle possible in C++03 as well. Not sure what the old type traits did with such types.
boost::is_function
says 0, even in C++11 mode. #include
#include #include <iostream> #include <typeinfo> struct X { void f() const {} };
template< class T > struct Y { };
template< class C, class F > void test( F C::* /*pf*/ ) { std::cout << boost::core::demangle( typeid( F ).name() ) << std::endl; std::cout << boost::core::demangle( typeid( Y<F> ).name() ) << std::endl; std::cout << boost::is_function< F >::value << std::endl; }
int main() { test( &X::f ); }
Peter, can you file a bug report so this doesn't get lost? I'm trying hard to *not* change semantics or implementation strategy at this stage. One thing at a time! Thanks, John.