【发布时间】:2012-01-22 05:11:20
【问题描述】:
这似乎是 MSVC10 中的错误?
#include <type_traits>
template<int j>
struct A{
template<int i>
typename std::enable_if<i==j>::type
t(){}
};
int main(){
A<1>().t<1>(); //error C2770
}
错误 C2770:无效的显式 template_or_generic 参数“enable_if::type A::t(void)”。
以下编译:
#include <type_traits>
template<class j>
struct A{
template<class i>
typename std::enable_if<std::is_same<i,j>::value>::type
t(){}
};
template<unsigned int j>
struct B{
template<unsigned int i>
typename std::enable_if<i==j>::type
t(){}
};
int main(){
A<int>().t<int>();
B<1>().t<1>();
}
【问题讨论】:
-
在 g++ 和 clang++ 中工作。你有
#include <type_traits>和using std::enable_if吗? -
错误是什么?不要发布“不工作”。 “不工作”是什么意思?是没有编译,还是什么?
-
奇怪的是,如果您将两个模板参数的类型都更改为
unsigned int,甚至long,MSVC10 似乎很高兴。这可能是您可以接受的解决方案。 -
没有名为
<typetraits>的标头。应该是<type_traits> -
它适用于
char、bool、size_t或long,它适用于不等于0或1的int! (好吧,我检查了2)。有关相关问题,请参阅 stackoverflow.com/questions/2763836/…。
标签: c++ visual-studio templates typetraits enable-if