我有一些为 Clang 3.2 编写的代码,我正试图将其移植到 VC++12 中运行。 Clang 3.2+ 和 GCC 4.8 没有问题,但 VC++12 有问题。这是产生问题的最小片段:
template <int(*ptr)()>
class foo {};
template<int N>
int ReturnsN() { return N; }
template<int N>
class bar {
typedef foo<ReturnsN<N>> fooN;
};
现在我很确定这是一个编译器错误(但如果不是,请告诉我!)给出的错误是:
'specialization' : cannot convert from 'int (__cdecl *)(void)' to 'int (__cdecl *)(void)'
那么有人知道一个体面的工作吗?编译器似乎确信专用函数未完全定义。
编辑:我还应该指出,我已经使用标准编译器和 2013 年 11 月的 CTP 进行了尝试。两者都有同样的问题。
最佳答案
一个糟糕的解决方法,我建议您向 connect 提交错误报告:
template < int (*)() >
class foo {};
template<int N>
int ReturnsN( ) { return N; }
template<int N>
class bar {
static int myReturnsN() { return ReturnsN<N>; }
using fooN = foo< myReturnsN >;
};
关于c++ - 解决 VC++12 中的模板特化错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21638907/