以下程序:
#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的行为是正确的。
这样说对吗?