<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/60597>60597</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[libc++] Should `num_get::do_get` accept `"inf"` and `"nan"`?
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
frederick-vs-ja
</td>
</tr>
</table>
<pre>
Currently libc++'s `std::num_get::do_get` overloads for floating point types accept characters `'i'`, `'I'`, `'n'`, and `'N'` during parsing in order to parse `"inf"`, `"nan"`, and variants with uppercase letters.
https://github.com/llvm/llvm-project/blob/af128791464810123bcd60a6d9d0902b5c550aef/libcxx/include/locale#L465
https://github.com/llvm/llvm-project/blob/af128791464810123bcd60a6d9d0902b5c550aef/libcxx/include/locale#L553
https://github.com/llvm/llvm-project/blob/af128791464810123bcd60a6d9d0902b5c550aef/libcxx/src/locale.cpp#L4793
However, [LWG2381](https://cplusplus.github.io/LWG/issue2381) clarified that `'i'`, `'I'`, `'n'`, and `'N'` are not parsed (and hence `"inf"` and `"nan"` are rejected).
I guess `'i'`, `'I'`, `'n'`, and `'N'` should only be accepted in some extension mode (e.g. perhapes when `__STRICT_ANSI__` is not defined?), and `'p'` and `'P'` should be rejected in C++03 mode.
This seems implementable by using different end offset in different modes instead of the fixed 32 (26 in C++03, 28 in C++11 and later, 32 in extension modes).
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVVFv6yYU_jX4BTXCEBz7wQ9tI99Vqq6mtdJ9jDAcYu4IWIDT5t9PkNybZtOkTaq0SUnsfIbP3zl85xwRo9k7gB7xB8S3lVjS5EOvAygIRv5-d4x330U1enXqH5cQwCV7wtaMEtGH8tlEjBoSk0LsHrF7txx2e0jnP8qX-4Zgf4RgvVARax-wtl4k4_Z49sYlnE4zRCykhDlhOYkgZIJQeBHdGEQ35e7xAjz9GXBXQDh1Ab-eQayWUN4kQsxX47APCgJOvmBwXk6N04jSj7TUCXeFMvFRBCNcivjNpAkv8wxBigjYQsp6V4hsEbk__04pzTFngQ6IDnuTpmVcSX9AdLD2-ONyNwf_HWRCdBitHxEdhK5pu-nqdbNua1JTNkrVENGoTpGO0JFLzokAnQnMKN_fER2Mk3ZRkCEvhQVE2fO64f8nOZyz_0pODPKnlJWc55KdTXej5xf_BkcI5ez5w_O3L5S1NeJbRNtbqXK2S8zf1UW08YgOz9--5LhjXKBspB2WVgSjDSicJpE-x8oiAHY-nX2rMKJtXjOBk39x8XX31cZlf4CcUVCIdjd-fcL7BeIn1Vyc_GIV9s6e8AiXygaViy_6A2B4T-Ci8Q4fvIIcCKz2KzxDmERuBW8TuEy52728_vb0-Lq7__rytNtlahNLChRo40AhNiDa3YqYf2TrJ_LrrazxmoWs6PHcyQgrYm6S8jqZiCPAIWJzmC0cwCUxWsDjCS-lnSijNeSuiMEp7LWOkDLpFc-kERsXE4i8AqcJsDbvoDCjOXTa3KjIwdD2A1TXJRQr0tmgjOaHtymM-Tgr1TPVsU5U0NfNhre0Zryppr4GzeqN4JoxxrTWrZAbrkhNaCc1AVWZnhLKCCUtqTnnzapdUzJq1awJ14zAiNYEDsLYVS7LlQ_7qpi9bwjvNpUVI9hYRgilDt5weZhNx7dV6Espj8s-ojWxJqZ4ZUkm2TJ7PkwUvsUv54NCDfmbcXKZFf_A9IgN1RJs_687TokhIjqUGP8IAAD__yyxHhM">