C++: 与えられた型が関数かの判定
規格合致系では関数へのポインタは void* に変換出来ないので、
boost/type_traits/is_convertible のようなものを使って判定出来ますが、
MSVC 等では関数へのポインタも void* に変換出来ます。
他の方法としては、関数そのものを関数の仮引数部に書くと、関数へのポインタと
看做されるという性質があるため、以下のようなものが考えられます。
template< class T >
struct is_function {
enum { value = is_same< int( T ), int( T* ) >::value };
};
ここで is_same は boost/type_traits/is_same 相当のものです。