On Tue, 3 May 2022, 06:39 Alexandre Oliva via Libstdc++, <
[email protected]> wrote:
>
> The floating-point overloads of from_char are only declared if
> _GLIBCXX_HAVE_USELOCALE is #defined as nonzero. That's exposed from
> charconv as _cpp_lib_to_chars >= 201611L, so guard the test body with
> that.
>
> Regstrapped on ppc64le-linux-gnu, and tested on
> x86_64-linux-gnu-x-ppc{,64}-vx7r2 (without _GLIBCXX_HAVE_USELOCALE).
> Ok to install? gcc-12? gcc-11?
>
>
> for libstdc++-v3/ChangeLog
>
> PR c++/105324
> * testsuite/20_util/from_chars/pr105324.cc: Guard test body
> with conditional for floating-point overloads of from_char.
> ---
> .../testsuite/20_util/from_chars/pr105324.cc | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/libstdc++-v3/testsuite/20_util/from_chars/pr105324.cc
> b/libstdc++-v3/testsuite/20_util/from_chars/pr105324.cc
> index cecb17e41cc68..a9e08303ef49d 100644
> --- a/libstdc++-v3/testsuite/20_util/from_chars/pr105324.cc
> +++ b/libstdc++-v3/testsuite/20_util/from_chars/pr105324.cc
> @@ -5,10 +5,12 @@
>
> int main()
> {
> +#if _cpp_lib_to_chars >= 201611L // FP from_char not available otherwise.
>
That macro should start with two underscores.
OK for trunk and gcc-11 with that change.
gcc-12 branch needs RM approval. OK for 12.2 if not approved for 12.1
// PR libstdc++/105324
> // std::from_chars() assertion at floating_from_chars.cc:78
> std::string s(512, '1');
> s[1] = '.';
> long double d;
> std::from_chars(s.data(), s.data() + s.size(), d);
> +#endif
> }
>