std::initializer_list<std::string_view>的初始化
Initialization of std::initializer_list<std::string_view>
下面的程序
#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)。使用 GCC,它会产生错误
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 的行为就在这里。
对吗?
是的,你是对的。这是一个 GCC bug.
下面的程序
#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)。使用 GCC,它会产生错误
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 的行为就在这里。
对吗?
是的,你是对的。这是一个 GCC bug.