template <typename T> struct is_enum_check { is_enum_check(T const&); static yes_type check(int); static no_type check(is_enum_check const&); }; template <typename T> struct is_enum_impl { enum { value1 = (sizeof(yes_type) == sizeof(is_enum_check<T>::check(*((T*)0)))), value2 = !is_primitive<T>::value, value3 = value1 && value2 }; }; template <typename T> struct is_enum { enum { value = is_enum_impl<T>::value3 }; };
肝はis_enum_checkのコンストラクタでexplicitにしないことと、このオブジェクトアダプタをis_enum_checkと別体にしないこと。別体にすると不可思議なコンパイルエラーになった。
0 件のコメント:
コメントを投稿