类内静态成员初始化

In-class static member initialization

本文关键字:初始化 静态成员      更新时间:2023-10-16

给定

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

海湾合作委员会 4.8 说

错误:静态成员"S::rx"的非常量类内初始化无效

static constexpr auto& rx = x;  
                            ^

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

错误:"S::rx"在声明时无法由非常量表达式初始化

我希望x是一个常量表达式,适合于这种初始化。这是一个 gcc 错误吗?如果没有,这是怎么回事?

这是一个错误,似乎已经报告过。

您可以改为执行以下操作:

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