错误:'constexpr'中的重新声明不同

Jos*_*Lee 4 c++ g++ constexpr c++11 clang++

Clang接受此代码,但GCC拒绝它:

class Foo {
 public:
  static constexpr double kVal = 0.25f;
};

const double Foo::kVal;
Run Code Online (Sandbox Code Playgroud)

(使用clang 3.0和g ++ 4.6.3)

~$ clang++ foo.cc -std=c++11 -c 
[ok]
~$ g++ foo.cc -std=c++0x -c 
foo.cc:6:19: error: redeclaration ‘Foo::kVal’ differs in ‘constexpr’
foo.cc:3:34: error: from previous declaration ‘Foo::kVal’
foo.cc:6:19: error: declaration of ‘constexpr const double Foo::kVal’ outside of class is not definition [-fpermissive]
Run Code Online (Sandbox Code Playgroud)

哪种解释是正确的?

asc*_*ler 6

铿锵是对的.看起来gcc团队中有人误读或误操作:

7.1.5/1:

如果函数或函数模板的任何声明都有constexpr说明符,那么它的所有声明都应该包含说明constexpr符.

Foo::kVal显然不是功能或功能模板.我没有看到标准中的任何其他内容要求使用constexpr从一个声明到下一个声明的一致性.