https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96626
Bug ID: 96626 Summary: utf-8 string literal not convertible to std::string with -std=c++20 Product: gcc Version: 10.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: rcopley at gmail dot com Target Milestone: --- This is accepted with -std=c++17 and rejected with -std=c++20: #include <string> #include <iostream> int main () { std::string s = u8"Hello, "; std::cout << u8"World!"; return 0; } The error output with -std=c++20 is: g++ -Wall -Wextra -std=c++2a x.cpp x.cpp: In function 'int main()': x.cpp:6:19: error: conversion from 'const char8_t [8]' to non-scalar type 'std::string' {aka 'std::__cxx11::basic_string<char>'} requested 6 | std::string s = u8"Hello, "; | ^~~~~~~~~~~ x.cpp:7:16: error: use of deleted function 'std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char, _Traits>&, const char8_t*) [with _Traits = std::char_traits<char>]' 7 | std::cout << u8"World!"; | ^~~~~~~~~~ In file included from c:/msys64/mingw64/include/c++/10.2.0/iostream:39, from x.cpp:2: c:/msys64/mingw64/include/c++/10.2.0/ostream:640:5: note: declared here 640 | operator<<(basic_ostream<char, _Traits>&, const char8_t*) = delete; | ^~~~~~~~