[/ Copyright 2007 John Maddock. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). ] [section:is_function is_function] template struct is_function : public __tof {}; __inherit If T is a (possibly cv-qualified) function type then inherits from __true_type, otherwise inherits from __false_type. Note that this template does not detect /pointers to functions/, or /references to functions/, these are detected by __is_pointer and __is_reference respectively: typedef int f1(); // f1 is of function type. typedef int (*f2)(); // f2 is a pointer to a function. typedef int (&f3)(); // f3 is a reference to a function. __std_ref 3.9.2p1 and 8.3.5. [all_compilers] __header ` #include ` or ` #include ` __examples [:`is_function` inherits from `__true_type`.] [:`is_function::type` is the type `__true_type`.] [:`is_function::value` is an integral constant expression that evaluates to /true/.] [:`is_function::value` is an integral constant expression that evaluates to /false/: the argument in this case is a pointer type, not a function type.] [:`is_function::value` is an integral constant expression that evaluates to /false/: the argument in this case is a reference to a function, not a function type.] [:`is_function::value` is an integral constant expression that evaluates to /false/: the argument in this case is a pointer to a member function.] [:`is_function::value_type` is the type `bool`.] [tip Don't confuse function-types with pointers to functions: `typedef int f(double);` defines a function type, `f foo;` declares a prototype for a function of type `f`, `f* pf = foo;` `f& fr = foo;` declares a pointer and a reference to the function `foo`. If you want to detect whether some type is a pointer-to-function then use: `__is_function<__remove_pointer::type>::value && __is_pointer::value` or for pointers to member functions you can just use __is_member_function_pointer directly. ] [endsect]