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