書いたコードは,こんな感じ.
namespace pezzi { template< class T > int _validate_type(); template< class T, bool = true > struct lazy_identity_ { // nested typename `type' is not defined }; template< class T > struct lazy_identity_< T, ( sizeof( _validate_type<typename T::type>() ) > 0 ) > { typedef typename T::type type; }; template< bool Cond, class T > struct lazy_enable_if_c : lazy_identity_<T> {}; template< class T > struct lazy_enable_if_c< false, T > {}; } // namespace pezzi
boost::lazy_enable_if_c
との違いは, typename T::type
が存在しない場合には, typename lazy_enable_if_c
も定義されないようになっている点.
SFINAE 関連で便利…かもね?