我需要用两个编译器版本编译代码:
g++ (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3
g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
我在这样的头文件中有一段代码:
template <RealType> class Constant {
...
/*constexpr*/ static const RealType Pi = 3.1415926535897932384626433832795028841971693993751;
...
};
如果我使用它构建代码constexpr
,g++ -std=gnu++0x
它适用于版本 4.7.3。但是使用 4.6.3 版本。构建包含头文件的 *.cpp 文件失败:
error: both ‘const’ and ‘constexpr’ cannot be used here
但是,如果我不使用constexpr
版本 4.6.3 抱怨:
error: ‘constexpr’ needed for in-class initialisation of static data member ‘const double Constant<double>::Pi’
有解决方法吗?
顺便说一句,如果我省略-std=gnu++0x
(当然constexpr
) ,代码构建得很好