https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103294
--- Comment #3 from cqwrteur <unlvsur at live dot com> --- (In reply to Andrew Pinski from comment #1) > GCC complains with -std=c++2b: > <source>: In function 'constexpr bool foo()': > <source>:7:33: error: call to non-'constexpr' function > 'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const > _CharT*, const _Alloc&) [with <template-parameter-2-1> = > std::allocator<char>; _CharT = char; _Traits = std::char_traits<char>; > _Alloc = std::allocator<char>]' > 7 | std::string str2{"abcwe"}; > | ^ > In file included from > /opt/compiler-explorer/gcc-trunk-20211116/include/c++/12.0.0/string:53, > from <source>:2: > /opt/compiler-explorer/gcc-trunk-20211116/include/c++/12.0.0/bits/ > basic_string.h:535:7: note: 'std::__cxx11::basic_string<_CharT, _Traits, > _Alloc>::basic_string(const _CharT*, const _Alloc&) [with > <template-parameter-2-1> = std::allocator<char>; _CharT = char; _Traits = > std::char_traits<char>; _Alloc = std::allocator<char>]' declared here > 535 | basic_string(const _CharT* __s, const _Alloc& __a = _Alloc()) > | ^~~~~~~~~~~~ > <source>: At global scope: > <source>:11:18: error: non-constant condition for static assertion > 11 | static_assert(foo()); > | ~~~^~ > <source>:11:18: error: 'constexpr bool foo()' called in a constant expression > <source>:5:16: note: 'constexpr bool foo()' declared here > 5 | constexpr bool foo() > | ^~~ > > Even libc++ fails to compile the code: > <source>:7:14: error: variable of non-literal type 'std::string' (aka > 'basic_string<char, char_traits<char>, allocator<char>>') cannot be defined > in a constexpr function > std::string str2{"abcwe"}; > ^ > /opt/compiler-explorer/clang-trunk-20211116/bin/../include/c++/v1/string:679: > 5: note: 'basic_string<char>' is not literal because it is not an aggregate > and has no constexpr constructors other than copy or move constructors > basic_string > ^ > 1 error generated. Your gcc is old and needs update. This is a new feature added today. But it does not work clang.