以下测试程序使用g ++编译并运行良好。使用Intel icpc(14.0.2),如果我使用像double这样的显式类型而不是模板,它将编译并运行。带有icpc的模板版本会产生错误:
icpc -g -O2 -I. -std=c++0x -c main.cc -o main.o
main.cc(10): error: a member of type "const T [9]" cannot have an in-class initializer
static constexpr T dx_[9] = {
测试代码
template<typename T>
class myclass {
public:
static constexpr T dx_[9] = {
1.5, 2.0, -0.5,
-0.5, 0.0, 0.5,
0.5, -2.0, -1.5
};
};
template<typename T> constexpr T myclass<T>::dx_[9];
int main(int argc, char *argv[]) {
return 0;
} // main
为什么我在使用constexpr
时收到错误“无法使用类内初始化程序”?
答案 0 :(得分:2)
这是英特尔编译器的错误,它已提交给英特尔,并将在未来版本中修复。
另请参阅英特尔论坛上的Multiple constexpr bugs,sfinae bug with intel c++ compiler 15和method constexpr bug with c++ compiler 15。
答案 1 :(得分:0)
看来你的编译器已经过时了。 -std=c++0x
标志显示它在C ++ 11标准实施之前就已实现。
如果编译器支持,请尝试使用-std=c++11
开关。
否则,请升级您的编译器或不要使用这些奇特的新功能。