การเริ่มต้นของ std :: initializer_list <std :: string_view>

Oct 30 2020

โปรแกรมต่อไปนี้

#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 (ถ่าน const *)คือconstexprฉันคิดว่าพฤติกรรมของ Clang อยู่ตรงนี้

ถูกต้องหรือไม่

คำตอบ

1 xskxzr Nov 08 2020 at 08:54

ใช่คุณถูกต้อง. มันเป็นข้อผิดพลาด GCC