[Bug libstdc++/70493] std::setlocale("") throws exception

redi at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Jul 13 11:15:56 GMT 2020


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

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|---                         |WONTFIX

--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Libstdc++ has no idea why the locale name was invalid. When you use the empty
string "" it constructs a locale name from the environment and then calls
newlocale from the C library. newlocale returns (locale_t)0 and sets ENOENT,
which according to POSIX means "For any of the categories in category_mask, the
locale data is not available" (or for the GNU C library, "locale is not a
string pointer referring to a valid locale").

Unless libstdc++ is going to iteratively try creating a locale from each of the
LC_* environment variables to see which one failed, it can't really give you
any better information. That doesn't seem worth the effort (and increase in
code size), sorry.


More information about the Gcc-bugs mailing list