This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.

3674. Removal of requirement for locale names for construction of locales not explained

Section: 30.3.1.4 [locale.members] Status: New Submitter: Hubert Tong Opened: 2022-02-12 Last modified: 2022-03-04

Priority: 2

View all other issues in [locale.members].

View all issues with New status.

Discussion:

LWG 2394 removed the only text in the wording that requires that the name of a locale is usable for constructing further locales.

The relevant notes from the wiki appear to make it seem like LWG thought the change was editorial.

Perhaps the resolution was motivated by a different defect than the one that led to the change?

Namely,

explicit locale(const char* std_name);

is said to use "standard C locale names".

There is no LC_MESSAGES in standard C.

Thus, it is a question whether the aforementioned constructor should be able to consume names produced by the C++ implementation.

See also the use of the name of the C++ locale in locale::global() for use with setlocale.

The following would restore the equivalence of locales that have the same name. It also addresses the suitability of the name for use with setlocale and the locale(const char*) constructor as a matter of QoI.

[2022-03-04; Reflector poll]

Set priority to 2 after reflector poll.

Proposed resolution:

This wording is relative to N4901.

  1. Modify 30.3.1.4 [locale.members] as indicated:

    string name() const;
    

    -5- Returns: The name of *this, if it has one; otherwise, the string "*".

    -?- Remarks: Two locales have identical names only if their facets have identical virtual function semantics.

    -?- Recommended practice: The name of a locale that has a name should be such that setlocale(LC_ALL, name().c_str()) returns a non-null pointer. [Note 1: With such a name locale(name().c_str()) succeeds and does not throw runtime_error. — end note]