我有以下代码:
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的构造函数在第一个调用之前已经被定义了。
static constexpr
函数在常量表达式中调用是一个错误?和constexpr结构体成员初始化。 - EvgBar
的构造函数内部,应该将Foo
视为完整的(https://timsong-cpp.github.io/cppwp/n4140/class#mem-2)。这意味着它(虽然间接地)依赖于`Foo`的完整性才能在常量表达式中使用。因此,在`Foo`尚未完整之前,它不能用于上下文中。 - StoryTeller - Unslander Monica