https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112315

            Bug ID: 112315
           Summary: 32-bit numeric conversion functions missing - only
                    wstring versions defined
           Product: gcc
           Version: 13.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: mccannd at uk dot ibm.com
  Target Milestone: ---

I created the following test program:

====
#include <string>

int main(int argc, char* argv[])
{
  std::string X = "my string";
  unsigned long long Y = std::stoull(X);
}
====

Using g++ 13.2.1, running the following fails:
$ g++ -m32 cpptest.cpp
cpptest.cpp: In function 'int main(int, char**)':
cpptest.cpp:6:38: error: invalid initialization of reference of type 'const
std::wstring&' {aka 'const std::__cxx11::basic_string<wchar_t>&'} from
expression of type 'std::string' {aka 'std::__cxx11::basic_string<char>'}
    6 |   unsigned long long Y = std::stoull(X);
      |                                      ^
In file included from /usr/include/c++/13/string:54,
                 from cpptest.cpp:1:
/usr/include/c++/13/bits/basic_string.h:4280:25: note: in passing argument 1 of
'long long unsigned int std::__cxx11::stoull(const std::wstring&, std::size_t*,
int)'
 4280 |   stoull(const wstring& __str, size_t* __idx = 0, int __base = 10)
      |          ~~~~~~~~~~~~~~~^~~~~

This appears to be because _GLIBCXX11_USE_C99_STDLIB is no longer defined in
/usr/include/c++/13/x86_64-redhat-linux/32/bits/c++config.h.

The same compilation using g++ 13.0.1 works fine.

Reply via email to