久しぶりにメタプログラミングをしようと思う。特に、has_xxxをC++11で書くことに挑戦してみる。has_xxxとは、ある型がネストされた名前を持っているかどうかを確認するメタ関数である。名前は、型、もしくは非型のどちらかになる。 まず、型の方から。 namespace detail { template < typename T, typename U = typename T::type > std::true_type check_type( int ) ; template < typename T > std::false_type check_type( long ) ; } template < typename T > struct has_type : decltype( detail::check_type<T>( 0 ) ) { } ; なんと、たったのこれだけの