Khởi tạo std :: initializer_list <std :: string_view>

Oct 30 2020

Chương trình sau

#include <initializer_list>
#include <string_view>

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

int main() {}

biên dịch với Clang hiện tại (12.0.0) nhưng không phải với GCC hiện tại (11.0.0 20201028). Với GCC, nó tạo ra lỗi

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

Từ [dcl.init.list / 5] và thực tế là hàm tạo string_view (char const *)constexpr , tôi giả sử rằng hành vi của Clang là đúng ở đây.

Đúng không?

Trả lời

1 xskxzr Nov 08 2020 at 08:54

Ừ bạn đúng rồi đó. Đó là một lỗi GCC .