模板MSVC中的嵌套名称

时间:2012-08-27 22:40:06

标签: c++ visual-studio templates

我有一些代码,我无法理解,为什么它不在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(或其他)的链接将不胜感激。

0 个答案:

没有答案