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

Reply via email to