使用MSVC 2013初始化`static constexpr double`

Nav*_*vin 7 c++ visual-c++ constexpr c++11 visual-studio-2013

标题说明了所有这两种常用方法都不起作用.我错过了什么?

1.

class Cl {
    static constexpr double PI;
};
constexpr double Cl::PI = 3.14;
Run Code Online (Sandbox Code Playgroud)

(26):错误C2737:'private:static double const Cl :: PI':'constexpr'对象必须初始化

2.

class Cl {
    static constexpr double PI = 3.14;
};
Run Code Online (Sandbox Code Playgroud)

(26):错误C2864:'Cl :: PI':具有类内初始化程序的静态数据成员必须具有非易失性const整数类型
类型为'const double'

在两次尝试中,错误都在类中的同一行.我正在使用VisualStudio/MSVC 2013年11月CTP编译器.

请注意,使变量const不是解决方案,因为我想在constexpr函数和普通函数中使用此常量.

Cod*_*ler 5

根据该博客中 Stephan TL的表格和解释,constexpr实际上仅在VS Nov 2013 CTP中部分实现。

CTP支持C ++ 11 constexpr,成员函数除外。(另一个限制是不支持数组。)而且,它不支持C ++ 14的扩展constexpr规则。

(希望将其放在评论中,但没有足够的要点)

编辑:只是要补充一下,在Herb的博客中,关于静态成员的问题几乎相同,但是答复与Stephan相同。

我认为可以简单地说,2013年11月CTP未实现所需的OP功能(发送错误报告?),然后等待2014年7月CTP或VS Next(可悲)。

  • +1好的答案(具有讽刺意味的是,OP的用例并未完全涵盖在异常中,但是,嘿,我们不能指望MSVC编译器中详尽列出损坏的功能!(保存树) (2认同)