类内静态成员初始化

时间:2014-02-09 14:14:28

标签: c++ c++11 static-members constant-expression in-class-initialization

鉴于

struct X {};

constexpr auto x = X{};

struct S {
    static constexpr auto& rx = x;  
};

gcc 4.8说

  

错误:非常量的类内初始化对静态成员'S :: rx'

无效
static constexpr auto& rx = x;  
                            ^
  

错误:(需要进行类外初始化)

     

错误:声明

时,非常量表达式无法初始化'S :: rx'

我希望x是一个常量表达式,适合这种初始化。这是一个gcc bug吗?如果没有,这里发生了什么?

2 个答案:

答案 0 :(得分:2)

这是一个错误,似乎是already reported

答案 1 :(得分:0)

您可以改为:

struct X {};

const auto x = X{};

struct S {
    static constexpr auto& rx = x;  
};