1 template < typename T > struct integral_c { 2 static const T value = 0; 3 }; 4 struct is_reference:integral_c < bool > { }; 5 template < class > struct is_function_ptr_helper { }; 6 template < bool > struct is_function_chooser; 7 8 template <> struct is_function_chooser <0 > 9 { 10 template < typename T > struct result_:is_function_ptr_helper < T * > { }; 11 }; 12 13 template < typename T > struct is_function_impl:is_function_chooser < 14 is_reference::value >::result_ < T > { }; 15