相关疑难解决方法(0)

通过引用调用`constexpr`成员函数-clang vs gcc

考虑以下示例(代码段 (0)):

struct X
{
    constexpr int get() const { return 0; }
};

void foo(const X& x)
{
    constexpr int i = x.get();
}

int main()
{
    foo(X{});
}
Run Code Online (Sandbox Code Playgroud)

与所有版本上面的例子编译g++之前g++ 10.x,从来没有下编译clang++。错误信息是:

error: 'x' is not a constant expression
    8 |     constexpr int i = x.get();
      |
Run Code Online (Sandbox Code Playgroud)

Godbolt.org 上的现场示例

错误是有道理的,因为x在 的主体中从来不是一个常量表达式foo,但是:

  • X::get()被标记constexpr并且它不依赖于的状态x

  • 更改const X&const X使用每个编译器(在 Godbolt.org 上) 片段 …

c++ language-lawyer constexpr c++17 c++20

8
推荐指数
1
解决办法
166
查看次数

标签 统计

c++ ×1

c++17 ×1

c++20 ×1

constexpr ×1

language-lawyer ×1