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