3

我有一些代码,我不明白,为什么它不能在MSVC(2010 Express,2012 RC)中编译并在其他编译器中编译(例如gcc 4.7)。是错误MSVC(我试图在谷歌中搜索,但找不到此错误的描述),还是我做了一些标准不支持的事情?

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>没有成员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