【发布时间】:2013-08-01 10:46:23
【问题描述】:
我需要用两个编译器版本编译代码:
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),代码构建得很好
【问题讨论】:
-
当您说“代码构建良好”时,您确定启用所有警告和
-pedantic? -
您意识到 GCC 4.6.3 支持的 C++11 少于 4.7.3,是吗?
-
@NicolBolas 是的,我愿意。但还有其他因素。这是一个更大的项目。