[PATCH] libstdc++: Ensure that std::from_chars is declared when supported
Patrick Palka
ppalka@redhat.com
Tue Mar 15 14:12:23 GMT 2022
On Mon, 14 Mar 2022, Jonathan Wakely wrote:
> On Mon, 14 Mar 2022 at 14:17, Patrick Palka via Libstdc++
> <libstdc++@gcc.gnu.org> wrote:
> >
> > On Fri, 11 Mar 2022, Jonathan Wakely wrote:
> >
> > > Patrick, I think this is right, but please take a look to double check.
> > >
> > > I think we should fix the feature-test macro conditions for gcc-11 too,
> > > although it's a bit more complicated there. It should depend on IEEE
> > > float and double *and* uselocale. We don't need the other changes on the
> > > branch.
> >
> > Don't we still depend on uselocale in GCC 12 for long double from_chars,
> > at least on targets where long double != binary64?
>
> Not after this patch:
>
> from_chars(const char* first, const char* last, long double& value,
> chars_format fmt) noexcept
> {
> -#if _GLIBCXX_FLOAT_IS_IEEE_BINARY32 && _GLIBCXX_DOUBLE_IS_IEEE_BINARY64 \
> - && ! USE_STRTOD_FOR_FROM_CHARS
> +#if ! USE_STRTOD_FOR_FROM_CHARS
> + // Either long double is the same as double, or we can't use strtold.
> + // In the latter case, this might give an incorrect result (e.g. values
> + // out of range of double give an error, even if they fit in long double).
>
> If uselocale isn't available, this defines the long double overload in
> terms of the double one, even if that doesn't always give the right
> answers. That greatly simplifies the preprocessor conditions for when
> it's supported. If the float and double forms are present, so is the
> long double one.
Ah sorry, I had overlooked that part of the patch. Makes sense and LGTM!
More information about the Libstdc++
mailing list