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++ > > <libstd...@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.