On 2023-09-21 10:28, Takashi Yano via Cygwin wrote:
On Fri, 22 Sep 2023 01:12:04 +0900
Takashi Yano wrote:
I wonder why the following code throws std::runtime_error
even though the LC_ALL is set to valid locale other than "C".
This does not occur only when LC_ALL is set to "C".

#include <locale>
int main()
{
        std::locale("");
        return 0;
}

In linux, this occurs only when the LC_ALL is set to invalid
locale (i.e. locale that is not registered in system).

Similarly,
std::locale("ja_JP.UTF-8")
throws std::runtime_error in cygwin.

Looks like the implementation does not like any default "" or explicit "en_US.UTF-8" strings there! See example at link and below; results are always the same:

        https://en.cppreference.com/w/cpp/locale/locale

#include <iostream>
#include <locale>

int main()
{
    std::wcout << "User-preferred locale setting is "
               << std::locale().name().c_str() << '\n';

    // on startup, the global locale is the "C" locale
    std::wcout << 1000.01 << '\n';
        
// replace the C++ global locale and the "C" locale with the user-preferred locale
    std::locale::global(std::locale(""));
    // use the new global locale for future wide character output
    std::wcout.imbue(std::locale());

    // output the same number again
    std::wcout << 1000.01 << '\n';
}

$ g++ -o c++locale{,.cc}
$ ./c++locale
User-preferred locale setting is C
1000.01
terminate called after throwing an instance of 'std::runtime_error'
  what():  locale::facet::_S_create_c_locale name not valid
Aborted (core dumped)

--
Take care. Thanks, Brian Inglis              Calgary, Alberta, Canada

La perfection est atteinte                   Perfection is achieved
non pas lorsqu'il n'y a plus rien à ajouter  not when there is no more to add
mais lorsqu'il n'y a plus rien à retirer     but when there is no more to cut
                                -- Antoine de Saint-Exupéry

--
Problem reports:      https://cygwin.com/problems.html
FAQ:                  https://cygwin.com/faq/
Documentation:        https://cygwin.com/docs.html
Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple

Reply via email to