[PATCH] libstdc++: Ensure that std::from_chars is declared when supported

Jonathan Wakely jwakely@redhat.com
Wed Mar 16 16:26:46 GMT 2022


On Tue, 15 Mar 2022 at 14:12, Patrick Palka wrote:
>
> 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!

Pushed to trunk now.



More information about the Libstdc++ mailing list