std::initializer_list<std::string_view> 的初始化

8

以下程序:

#include <initializer_list>
#include <string_view>

inline constexpr std::initializer_list<std::string_view> s = { "" };

int main() {}

当前使用Clang(12.0.0)编译不会出错,但使用GCC(11.0.0 20201028)编译会出现错误。

prog.cc:4:67: error: modification of '<temporary>' is not a constant expression
    4 | inline constexpr std::initializer_list<std::string_view> s = { "" };
      |                                                                    ^

根据[dcl.init.list/5]以及string_view(char const*)构造函数是constexpr的事实,我认为Clang的行为是正确的。

这样说对吗?


我没有彻底阅读过这篇文章,但我认为它可以给你一些关于正在发生的事情的想法。 - cigien
1个回答

2

是的,你是正确的。这是一个GCC bug


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接