Created on 2022-02-12.00:00:00 last changed 31 months ago
Proposed resolution:
Preconditions: The category argument is a valid value [locale.category].
Throws: runtime_error if
the argumentstd_name is not valid, or is null.
[ 2023-03-22 LWG 2295 was approved in Issaquah. Status changed: New → Resolved. ]
[ 2022-11-01; Jonathan comments ]
The proposed resolution of 2295 would resolve this too.
The implementation divergence is not a problem. [locale.category] p2 makes invalid category values undefined, so silently ignoring them or throwing exceptions are both valid.
[ 2022-03-04; Reflector poll ]
Set priority to 3 after reflector poll.
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 if std_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 [locale.category] result in runtime_error.
libc++ does not throw. libstdc++ does. Code:
#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");
}
}
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2023-03-22 13:19:33 | admin | set | messages: + msg13463 |
| 2023-03-22 13:19:33 | admin | set | status: new -> resolved |
| 2022-11-01 15:05:20 | admin | set | messages: + msg12904 |
| 2022-11-01 15:05:20 | admin | set | messages: + msg12903 |
| 2022-03-04 14:33:52 | admin | set | messages: + msg12396 |
| 2022-02-12 00:00:00 | admin | create | |