This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of Resolved status.
Section: 28.3.3.1.3 [locale.cons] Status: Resolved Submitter: Hubert Tong Opened: 2022-02-12 Last modified: 2023-03-22
Priority: 3
View all other issues in [locale.cons].
View all issues with Resolved status.
Discussion:
locale(const locale& other, const char* std_name, category);
has
Throws:
runtime_error
if the argument is not valid, or is null.
There being three arguments, the statement is rather problematic. It looks like a copy/paste from
explicit locale(const char* std_name);
The conclusion, assuming that "the argument" is also std_name
in the problem case, seems to be
that the statement should be changed to read:
Throws:
runtime_error
ifstd_name
is not valid, or is null.
However there is implementation divergence over whether or not values for the category argument not
explicitly described as valid by 28.3.3.1.2.1 [locale.category] result in runtime_error
.
#include <locale> #include <stdio.h> #include <exception> int main(void) { std::locale Generic("C"); try { std::locale Abomination(Generic, Generic, 0x7fff'ffff); } catch (std::runtime_error&) { fprintf(stderr, "Threw\n"); } }
[2022-03-04; Reflector poll]
Set priority to 3 after reflector poll.
[2022-11-01; Jonathan comments]
The proposed resolution of 2295(i) would resolve this too.
The implementation divergence is not a problem.
28.3.3.1.2.1 [locale.category] p2 makes invalid category
values
undefined, so silently ignoring them or throwing exceptions are both valid.
[2023-03-22 LWG 2295 was approved in Issaquah. Status changed: New → Resolved.]
Proposed resolution:
Preconditions: The
category
argument is a valid value 28.3.3.1.2.1 [locale.category].Throws:
runtime_error
ifthe argumentstd_name
is not valid, or is null.