静态constexpr成员变量初始化

时间:2020-06-02 08:04:06

标签: c++ c++14 constexpr

我有以下代码:

struct Foo
{       
    struct Bar
    {
        std::uint32_t x = -1;

        constexpr Bar(std::uint32_t x) : x(x) {}
    };

    static constexpr Bar CONST_BAR = Bar(0);
};

当我尝试编译它时,出现以下错误:

错误:在常量中调用了“ constexpr Foo :: Bar :: Bar(uint32_t)” 定义未完成之前的表达式

有人可以向我解释发生了什么吗?据我所知,Bar的构造函数是在第一个调用之前定义的。

Live example

2 个答案:

答案 0 :(得分:0)

我没有详细的解释,但是我碰巧也碰到了这个问题,并认为至少值得一提...除了将CONST_BAR的定义放在结构{{1之外] }},另一种可能的解决方法是实例化Foo

Foo

答案 1 :(得分:0)

您可能想尝试这样初始化-

static constexpr Foo::Bar CONST_BAR = Foo::Bar(0);

在 struct Foo 之外,因为 struct foo 的声明必须完成。