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;
| ^~~~~~~~