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!