3

私はいくつかのコードを持っていますが、なぜそれがMSVC(2010 Express、2012 RC) でコンパイルされず、他のコンパイラ (たとえばgcc 4.7) でコンパイルされないのか理解できません。それはバグですかMSVC(Googleで検索しようとしましたが、このバグの説明が見つかりません)、または標準でサポートされていない何かをしていますか?

template<typename T, T Val>
struct integral_c
{
    typedef integral_c<T, Val> type;
    static const T value = Val;
};

typedef integral_c<bool, true> true_;
typedef integral_c<bool, false> false_;

template<bool Cond, typename T = void>
struct enable_if
{
    typedef T type;
};

template<typename T>
struct enable_if<false, T>
{
};

template<typename T>
struct is_int : false_
{
};

template<>
struct is_int<int> : true_
{
};

template<typename T, typename = void>
struct identity_if_int
{
};

template<typename T>
struct identity_if_int<T, typename enable_if<is_int<T>::type::value>::type>
{
    typedef T type;
};

int main()
{
    identity_if_int<int>::type t = 0;
}

http://liveworkspace.org/code/311b71954b168862b19043ba49670856

MSVCそれenable_if<false>には member がありませんtype。私identity_if_intが好きなように専門化するとき

template<typename T>
struct identity_if_int<T, typename enable_if<is_int<T>::value>::type>
{
    typedef T type;
};

すべて正しく動作します。何が問題ですか?MSDN (またはその他のもの) へのヘルプとリンクを歓迎します。

4

0 に答える 0