PING: [PATCH] libstdc++: Deprecate numeric_limits::has_denorm (P2614R2)
Jonathan Wakely
jwakely.gcc@gmail.com
Thu Apr 9 20:26:22 GMT 2026
On Thu, 9 Apr 2026, 13:18 Fernando Pelliccioni, <fpelliccioni@gmail.com>
wrote:
> Ping. Original patch from 2026-03-26:
>
> https://gcc.gnu.org/pipermail/gcc-patches/2026-March/711525.html
>
> Implements P2614R2 (deprecate numeric_limits::has_denorm, has_denorm_loss,
> and float_denorm_style) for libstdc++. Already implemented by libc++ and
> MSVC STL.
>
Thanks for the patch.
I think we should commit this for GCC 17, otherwise we might introduce new
diagnostics for code that was compiling fine with GCC 16 snapshots released
up to now. I don't consider deprecation patches to be as high priority as
supporting new features or fixing bugs.
> Thanks,
> Fernando
>
> On Thu, Mar 26, 2026 at 11:58 PM Fernando Pelliccioni <
> fpelliccioni@gmail.com> wrote:
>
>> Deprecate numeric_limits::has_denorm, numeric_limits::has_denorm_loss,
>> and the float_denorm_style enum as specified by P2614R2 (C++23).
>>
>> The deprecation uses _GLIBCXX23_DEPRECATED on the member declarations,
>> with #pragma GCC diagnostic push/pop to suppress warnings from the
>> deprecated float_denorm_style type within the header itself. Internal
>> uses of has_denorm (e.g. in is_iec559 initialization) are also wrapped
>> with diagnostic suppression.
>>
>> libstdc++-v3/ChangeLog:
>>
>> * include/std/limits (float_denorm_style): Deprecate.
>> (has_denorm, has_denorm_loss): Deprecate in all specializations.
>> Suppress deprecated warnings for internal uses in is_iec559.
>> * include/bits/max_size_type.h (has_denorm, has_denorm_loss):
>> Deprecate.
>> * testsuite/18_support/numeric_limits/char16_32_t.cc: Suppress
>> the deprecation warning.
>> * testsuite/18_support/numeric_limits/char8_t.cc: Likewise.
>> * testsuite/18_support/numeric_limits/denorm_min.cc: Likewise.
>> * testsuite/18_support/numeric_limits/dr559.cc: Likewise.
>> *
>> testsuite/18_support/numeric_limits/requirements/constexpr_data.cc:
>> Likewise.
>> *
>> testsuite/18_support/numeric_limits/specialization_default_values.cc:
>> Likewise.
>> * testsuite/std/ranges/iota/max_size_type.cc: Likewise.
>> * testsuite/18_support/numeric_limits/deprecated-2b.cc: New test.
>>
>> Signed-off-by: Fernando Pelliccioni <fpelliccioni@gmail.com>
>> ---
>> libstdc++-v3/include/bits/max_size_type.h | 14 +-
>> libstdc++-v3/include/std/limits | 209 ++++++++++++++----
>> .../18_support/numeric_limits/char16_32_t.cc | 1 +
>> .../18_support/numeric_limits/char8_t.cc | 1 +
>> .../18_support/numeric_limits/denorm_min.cc | 1 +
>> .../numeric_limits/deprecated-2b.cc | 28 +++
>> .../18_support/numeric_limits/dr559.cc | 1 +
>> .../requirements/constexpr_data.cc | 1 +
>> .../specialization_default_values.cc | 1 +
>> .../std/ranges/iota/max_size_type.cc | 1 +
>> 10 files changed, 213 insertions(+), 45 deletions(-)
>> create mode 100644
>> libstdc++-v3/testsuite/18_support/numeric_limits/deprecated-2b.cc
>>
>> diff --git a/libstdc++-v3/include/bits/max_size_type.h
>> b/libstdc++-v3/include/bits/max_size_type.h
>> index 042aad10a13..cc7fe2d0396 100644
>> --- a/libstdc++-v3/include/bits/max_size_type.h
>> +++ b/libstdc++-v3/include/bits/max_size_type.h
>> @@ -791,9 +791,12 @@ namespace ranges
>> static constexpr bool has_infinity = false;
>> static constexpr bool has_quiet_NaN = false;
>> static constexpr bool has_signaling_NaN = false;
>> - static constexpr bool has_denorm_loss = false;
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> + static constexpr bool has_denorm_loss _GLIBCXX23_DEPRECATED =
>> false;
>> static constexpr bool tinyness_before = false;
>> - static constexpr float_denorm_style has_denorm = denorm_absent;
>> + static constexpr float_denorm_style has_denorm
>> _GLIBCXX23_DEPRECATED = denorm_absent;
>> +#pragma GCC diagnostic pop
>> static constexpr float_round_style round_style = round_toward_zero;
>>
>> static constexpr _Sp
>> @@ -858,9 +861,12 @@ namespace ranges
>> static constexpr bool has_infinity = false;
>> static constexpr bool has_quiet_NaN = false;
>> static constexpr bool has_signaling_NaN = false;
>> - static constexpr bool has_denorm_loss = false;
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> + static constexpr bool has_denorm_loss _GLIBCXX23_DEPRECATED =
>> false;
>> static constexpr bool tinyness_before = false;
>> - static constexpr float_denorm_style has_denorm = denorm_absent;
>> + static constexpr float_denorm_style has_denorm
>> _GLIBCXX23_DEPRECATED = denorm_absent;
>> +#pragma GCC diagnostic pop
>> static constexpr float_round_style round_style = round_toward_zero;
>>
>> static constexpr _Dp
>> diff --git a/libstdc++-v3/include/std/limits
>> b/libstdc++-v3/include/std/limits
>> index f0ba2851a0a..b4f53866a20 100644
>> --- a/libstdc++-v3/include/std/limits
>> +++ b/libstdc++-v3/include/std/limits
>> @@ -186,7 +186,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> * These values represent the presence or absence of a variable number
>> * of exponent bits. This type is used in the std::numeric_limits
>> class.
>> */
>> - enum float_denorm_style
>> + enum
>> + _GLIBCXX23_DEPRECATED
>> + float_denorm_style
>> {
>> /// Indeterminate at compile time whether denormalized values are
>> allowed.
>> denorm_indeterminate = -1,
>> @@ -270,11 +272,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
>>
>> /** See std::float_denorm_style for more information. */
>> - static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm =
>> denorm_absent;
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>> + _GLIBCXX23_DEPRECATED = denorm_absent;
>>
>> /** True if loss of accuracy is detected as a denormalization loss,
>> rather than as an inexact result. */
>> - static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>> + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
>> + _GLIBCXX23_DEPRECATED = false;
>> +#pragma GCC diagnostic pop
>>
>> /** True if-and-only-if the type adheres to the IEC 559 standard,
>> also
>> known as IEEE 754. (Only makes sense for floating point types.)
>> */
>> @@ -426,9 +433,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>> - = denorm_absent;
>> - static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>> + _GLIBCXX23_DEPRECATED = denorm_absent;
>> + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
>> + _GLIBCXX23_DEPRECATED = false;
>> +#pragma GCC diagnostic pop
>>
>> static _GLIBCXX_CONSTEXPR bool
>> infinity() _GLIBCXX_USE_NOEXCEPT { return false; }
>> @@ -496,9 +507,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>> - = denorm_absent;
>> - static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>> + _GLIBCXX23_DEPRECATED = denorm_absent;
>> + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
>> + _GLIBCXX23_DEPRECATED = false;
>> +#pragma GCC diagnostic pop
>>
>> static _GLIBCXX_CONSTEXPR
>> char infinity() _GLIBCXX_USE_NOEXCEPT { return char(); }
>> @@ -564,9 +579,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>> - = denorm_absent;
>> - static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>> + _GLIBCXX23_DEPRECATED = denorm_absent;
>> + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
>> + _GLIBCXX23_DEPRECATED = false;
>> +#pragma GCC diagnostic pop
>>
>> static _GLIBCXX_CONSTEXPR signed char
>> infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<signed
>> char>(0); }
>> @@ -635,9 +654,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>> - = denorm_absent;
>> - static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>> + _GLIBCXX23_DEPRECATED = denorm_absent;
>> + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
>> + _GLIBCXX23_DEPRECATED = false;
>> +#pragma GCC diagnostic pop
>>
>> static _GLIBCXX_CONSTEXPR unsigned char
>> infinity() _GLIBCXX_USE_NOEXCEPT
>> @@ -707,9 +730,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>> - = denorm_absent;
>> - static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>> + _GLIBCXX23_DEPRECATED = denorm_absent;
>> + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
>> + _GLIBCXX23_DEPRECATED = false;
>> +#pragma GCC diagnostic pop
>>
>> static _GLIBCXX_CONSTEXPR wchar_t
>> infinity() _GLIBCXX_USE_NOEXCEPT { return wchar_t(); }
>> @@ -771,9 +798,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>> - = denorm_absent;
>> - static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>> + _GLIBCXX23_DEPRECATED = denorm_absent;
>> + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
>> + _GLIBCXX23_DEPRECATED = false;
>> +#pragma GCC diagnostic pop
>>
>> static _GLIBCXX_CONSTEXPR char8_t
>> infinity() _GLIBCXX_USE_NOEXCEPT { return char8_t(); }
>> @@ -836,8 +867,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static constexpr bool has_infinity = false;
>> static constexpr bool has_quiet_NaN = false;
>> static constexpr bool has_signaling_NaN = false;
>> - static constexpr float_denorm_style has_denorm = denorm_absent;
>> - static constexpr bool has_denorm_loss = false;
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> + static constexpr float_denorm_style has_denorm
>> + _GLIBCXX23_DEPRECATED = denorm_absent;
>> + static constexpr bool has_denorm_loss
>> + _GLIBCXX23_DEPRECATED = false;
>> +#pragma GCC diagnostic pop
>>
>> static constexpr char16_t
>> infinity() noexcept { return char16_t(); }
>> @@ -897,8 +933,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static constexpr bool has_infinity = false;
>> static constexpr bool has_quiet_NaN = false;
>> static constexpr bool has_signaling_NaN = false;
>> - static constexpr float_denorm_style has_denorm = denorm_absent;
>> - static constexpr bool has_denorm_loss = false;
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> + static constexpr float_denorm_style has_denorm
>> + _GLIBCXX23_DEPRECATED = denorm_absent;
>> + static constexpr bool has_denorm_loss
>> + _GLIBCXX23_DEPRECATED = false;
>> +#pragma GCC diagnostic pop
>>
>> static constexpr char32_t
>> infinity() noexcept { return char32_t(); }
>> @@ -963,9 +1004,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>> - = denorm_absent;
>> - static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>> + _GLIBCXX23_DEPRECATED = denorm_absent;
>> + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
>> + _GLIBCXX23_DEPRECATED = false;
>> +#pragma GCC diagnostic pop
>>
>> static _GLIBCXX_CONSTEXPR short
>> infinity() _GLIBCXX_USE_NOEXCEPT { return short(); }
>> @@ -1032,9 +1077,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>> - = denorm_absent;
>> - static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>> + _GLIBCXX23_DEPRECATED = denorm_absent;
>> + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
>> + _GLIBCXX23_DEPRECATED = false;
>> +#pragma GCC diagnostic pop
>>
>> static _GLIBCXX_CONSTEXPR unsigned short
>> infinity() _GLIBCXX_USE_NOEXCEPT
>> @@ -1103,9 +1152,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>> - = denorm_absent;
>> - static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>> + _GLIBCXX23_DEPRECATED = denorm_absent;
>> + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
>> + _GLIBCXX23_DEPRECATED = false;
>> +#pragma GCC diagnostic pop
>>
>> static _GLIBCXX_CONSTEXPR int
>> infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<int>(0); }
>> @@ -1172,9 +1225,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>> - = denorm_absent;
>> - static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>> + _GLIBCXX23_DEPRECATED = denorm_absent;
>> + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
>> + _GLIBCXX23_DEPRECATED = false;
>> +#pragma GCC diagnostic pop
>>
>> static _GLIBCXX_CONSTEXPR unsigned int
>> infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<unsigned
>> int>(0); }
>> @@ -1242,9 +1299,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>> - = denorm_absent;
>> - static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>> + _GLIBCXX23_DEPRECATED = denorm_absent;
>> + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
>> + _GLIBCXX23_DEPRECATED = false;
>> +#pragma GCC diagnostic pop
>>
>> static _GLIBCXX_CONSTEXPR long
>> infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long>(0); }
>> @@ -1311,9 +1372,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>> - = denorm_absent;
>> - static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>> + _GLIBCXX23_DEPRECATED = denorm_absent;
>> + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
>> + _GLIBCXX23_DEPRECATED = false;
>> +#pragma GCC diagnostic pop
>>
>> static _GLIBCXX_CONSTEXPR unsigned long
>> infinity() _GLIBCXX_USE_NOEXCEPT
>> @@ -1384,9 +1449,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>> - = denorm_absent;
>> - static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>> + _GLIBCXX23_DEPRECATED = denorm_absent;
>> + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
>> + _GLIBCXX23_DEPRECATED = false;
>> +#pragma GCC diagnostic pop
>>
>> static _GLIBCXX_CONSTEXPR long long
>> infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast<long
>> long>(0); }
>> @@ -1454,9 +1523,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
>> static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>> - = denorm_absent;
>> - static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>> + _GLIBCXX23_DEPRECATED = denorm_absent;
>> + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
>> + _GLIBCXX23_DEPRECATED = false;
>> +#pragma GCC diagnostic pop
>>
>> static _GLIBCXX_CONSTEXPR unsigned long long
>> infinity() _GLIBCXX_USE_NOEXCEPT
>> @@ -1523,9 +1596,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; \
>> static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
>> \
>> static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; \
>> +_Pragma("GCC diagnostic push") \
>> +_Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \
>> static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm \
>> + _GLIBCXX23_DEPRECATED \
>> = denorm_absent; \
>> - static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; \
>> + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss \
>> + _GLIBCXX23_DEPRECATED = false; \
>> +_Pragma("GCC diagnostic pop") \
>> \
>> static _GLIBCXX_CONSTEXPR TYPE \
>> infinity() _GLIBCXX_USE_NOEXCEPT \
>> @@ -1592,9 +1670,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; \
>> static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false;
>> \
>> static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; \
>> +_Pragma("GCC diagnostic push") \
>> +_Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \
>> static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm \
>> + _GLIBCXX23_DEPRECATED \
>> = denorm_absent; \
>> - static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; \
>> + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss \
>> + _GLIBCXX23_DEPRECATED = false; \
>> +_Pragma("GCC diagnostic pop") \
>> \
>> static _GLIBCXX_CONSTEXPR unsigned TYPE \
>> infinity() _GLIBCXX_USE_NOEXCEPT
>> \
>> @@ -1713,10 +1796,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static _GLIBCXX_USE_CONSTEXPR bool has_infinity =
>> __FLT_HAS_INFINITY__;
>> static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN =
>> __FLT_HAS_QUIET_NAN__;
>> static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN =
>> has_quiet_NaN;
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>> + _GLIBCXX23_DEPRECATED
>> = bool(__FLT_HAS_DENORM__) ? denorm_present : denorm_absent;
>> static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
>> + _GLIBCXX23_DEPRECATED
>> = __glibcxx_float_has_denorm_loss;
>> +#pragma GCC diagnostic pop
>>
>> static _GLIBCXX_CONSTEXPR float
>> infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_valf(); }
>> @@ -1730,8 +1818,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static _GLIBCXX_CONSTEXPR float
>> denorm_min() _GLIBCXX_USE_NOEXCEPT { return __FLT_DENORM_MIN__; }
>>
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> static _GLIBCXX_USE_CONSTEXPR bool is_iec559
>> = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
>> +#pragma GCC diagnostic pop
>> static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
>> static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
>>
>> @@ -1788,10 +1879,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static _GLIBCXX_USE_CONSTEXPR bool has_infinity =
>> __DBL_HAS_INFINITY__;
>> static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN =
>> __DBL_HAS_QUIET_NAN__;
>> static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN =
>> has_quiet_NaN;
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>> + _GLIBCXX23_DEPRECATED
>> = bool(__DBL_HAS_DENORM__) ? denorm_present : denorm_absent;
>> static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
>> + _GLIBCXX23_DEPRECATED
>> = __glibcxx_double_has_denorm_loss;
>> +#pragma GCC diagnostic pop
>>
>> static _GLIBCXX_CONSTEXPR double
>> infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_val(); }
>> @@ -1805,8 +1901,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static _GLIBCXX_CONSTEXPR double
>> denorm_min() _GLIBCXX_USE_NOEXCEPT { return __DBL_DENORM_MIN__; }
>>
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> static _GLIBCXX_USE_CONSTEXPR bool is_iec559
>> = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
>> +#pragma GCC diagnostic pop
>> static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
>> static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
>>
>> @@ -1863,10 +1962,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static _GLIBCXX_USE_CONSTEXPR bool has_infinity =
>> __LDBL_HAS_INFINITY__;
>> static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN =
>> __LDBL_HAS_QUIET_NAN__;
>> static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN =
>> has_quiet_NaN;
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>> + _GLIBCXX23_DEPRECATED
>> = bool(__LDBL_HAS_DENORM__) ? denorm_present : denorm_absent;
>> static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
>> + _GLIBCXX23_DEPRECATED
>> = __glibcxx_long_double_has_denorm_loss;
>> +#pragma GCC diagnostic pop
>>
>> static _GLIBCXX_CONSTEXPR long double
>> infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_huge_vall(); }
>> @@ -1880,8 +1984,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> static _GLIBCXX_CONSTEXPR long double
>> denorm_min() _GLIBCXX_USE_NOEXCEPT { return __LDBL_DENORM_MIN__; }
>>
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> static _GLIBCXX_USE_CONSTEXPR bool is_iec559
>> = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
>> +#pragma GCC diagnostic pop
>> static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
>> static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
>>
>> @@ -1956,10 +2063,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> = __glibcxx_concat3 (__FLT, BITSIZE, _HAS_QUIET_NAN__); \
>> static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN \
>> = has_quiet_NaN; \
>> +_Pragma("GCC diagnostic push") \
>> +_Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
>> \
>> static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm \
>> + _GLIBCXX23_DEPRECATED \
>> = bool(__glibcxx_concat3 (__FLT, BITSIZE, _HAS_DENORM__)) \
>> ? denorm_present : denorm_absent; \
>> - static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; \
>> + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss \
>> + _GLIBCXX23_DEPRECATED = false; \
>> +_Pragma("GCC diagnostic pop") \
>> \
>> static _GLIBCXX_CONSTEXPR _Float##BITSIZE
>> \
>> infinity() _GLIBCXX_USE_NOEXCEPT \
>> @@ -1977,8 +2089,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>> denorm_min() _GLIBCXX_USE_NOEXCEPT \
>> { return __glibcxx_concat3 (__FLT, BITSIZE, _DENORM_MIN__); } \
>> \
>> +_Pragma("GCC diagnostic push") \
>> +_Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \
>> static _GLIBCXX_USE_CONSTEXPR bool is_iec559 \
>> = has_infinity && has_quiet_NaN && has_denorm == denorm_present;\
>> +_Pragma("GCC diagnostic pop") \
>> static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; \
>> static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false; \
>> \
>> @@ -2055,9 +2170,14 @@ __glibcxx_float_n(128)
>> static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN
>> = __BFLT16_HAS_QUIET_NAN__;
>> static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN =
>> has_quiet_NaN;
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>> + _GLIBCXX23_DEPRECATED
>> = bool(__BFLT16_HAS_DENORM__) ? denorm_present : denorm_absent;
>> - static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>> + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
>> + _GLIBCXX23_DEPRECATED = false;
>> +#pragma GCC diagnostic pop
>>
>> static _GLIBCXX_CONSTEXPR __gnu_cxx::__bfloat16_t
>> infinity() _GLIBCXX_USE_NOEXCEPT
>> @@ -2075,8 +2195,11 @@ __glibcxx_float_n(128)
>> denorm_min() _GLIBCXX_USE_NOEXCEPT
>> { return __BFLT16_DENORM_MIN__; }
>>
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> static _GLIBCXX_USE_CONSTEXPR bool is_iec559
>> = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
>> +#pragma GCC diagnostic pop
>> static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
>> static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
>>
>> @@ -2155,9 +2278,13 @@ __glibcxx_float_n(128)
>> #else
>> static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
>> #endif
>> +#pragma GCC diagnostic push
>> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
>> static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>> - = denorm_present;
>> - static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>> + _GLIBCXX23_DEPRECATED = denorm_present;
>> + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
>> + _GLIBCXX23_DEPRECATED = false;
>> +#pragma GCC diagnostic pop
>>
>> static _GLIBCXX_CONSTEXPR __float128
>> infinity() _GLIBCXX_USE_NOEXCEPT
>> diff --git
>> a/libstdc++-v3/testsuite/18_support/numeric_limits/char16_32_t.cc
>> b/libstdc++-v3/testsuite/18_support/numeric_limits/char16_32_t.cc
>> index 2c8712c861c..c36329b052d 100644
>> --- a/libstdc++-v3/testsuite/18_support/numeric_limits/char16_32_t.cc
>> +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/char16_32_t.cc
>> @@ -1,5 +1,6 @@
>> // { dg-do run { target c++11 } }
>> // { dg-require-cstdint "" }
>> +// { dg-additional-options "-Wno-deprecated-declarations" { target c++23
>> } }
>>
>> // 2008-05-20 Paolo Carlini <paolo.carlini@oracle.com>
>> //
>> diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/char8_t.cc
>> b/libstdc++-v3/testsuite/18_support/numeric_limits/char8_t.cc
>> index e23dbb7adbf..59a0bbbc160 100644
>> --- a/libstdc++-v3/testsuite/18_support/numeric_limits/char8_t.cc
>> +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/char8_t.cc
>> @@ -1,6 +1,7 @@
>> // { dg-do run { target c++11 } }
>> // { dg-require-cstdint "" }
>> // { dg-options "-fchar8_t" }
>> +// { dg-additional-options "-Wno-deprecated-declarations" { target c++23
>> } }
>>
>> // Copyright (C) 2017-2026 Free Software Foundation, Inc.
>> //
>> diff --git
>> a/libstdc++-v3/testsuite/18_support/numeric_limits/denorm_min.cc
>> b/libstdc++-v3/testsuite/18_support/numeric_limits/denorm_min.cc
>> index b508d082b8e..619fe632c23 100644
>> --- a/libstdc++-v3/testsuite/18_support/numeric_limits/denorm_min.cc
>> +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/denorm_min.cc
>> @@ -1,4 +1,5 @@
>> // { dg-add-options ieee }
>> +// { dg-additional-options "-Wno-deprecated-declarations" { target c++23
>> } }
>>
>> // 1999-08-23 bkoz
>>
>> diff --git
>> a/libstdc++-v3/testsuite/18_support/numeric_limits/deprecated-2b.cc
>> b/libstdc++-v3/testsuite/18_support/numeric_limits/deprecated-2b.cc
>> new file mode 100644
>> index 00000000000..5bc2fef977d
>> --- /dev/null
>> +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/deprecated-2b.cc
>> @@ -0,0 +1,28 @@
>> +// Copyright (C) 2026 Free Software Foundation, Inc.
>> +//
>> +// This file is part of the GNU ISO C++ Library. This library is free
>> +// software; you can redistribute it and/or modify it under the
>> +// terms of the GNU General Public License as published by the
>> +// Free Software Foundation; either version 3, or (at your option)
>> +// any later version.
>> +//
>> +// This library is distributed in the hope that it will be useful,
>> +// but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>> +// GNU General Public License for more details.
>> +//
>> +// You should have received a copy of the GNU General Public License
>> along
>> +// with this library; see the file COPYING3. If not see
>> +// <http://www.gnu.org/licenses/>.
>> +
>> +// { dg-do compile { target c++23 } }
>> +
>> +#include <limits>
>> +
>> +std::float_denorm_style s; // { dg-warning "is deprecated" }
>> +auto a = std::numeric_limits<float>::has_denorm; // { dg-warning "is
>> deprecated" }
>> +auto b = std::numeric_limits<float>::has_denorm_loss; // { dg-warning
>> "is deprecated" }
>> +auto c = std::numeric_limits<int>::has_denorm; // { dg-warning "is
>> deprecated" }
>> +auto d = std::numeric_limits<int>::has_denorm_loss; // { dg-warning "is
>> deprecated" }
>> +
>> +// { dg-prune-output "declared here" }
>> diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc
>> b/libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc
>> index 88c0ca505f2..5d67b0152d5 100644
>> --- a/libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc
>> +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc
>> @@ -1,4 +1,5 @@
>> // { dg-do run { target c++11 } }
>> +// { dg-additional-options "-Wno-deprecated-declarations" { target c++23
>> } }
>>
>> // 2010-02-17 Paolo Carlini <paolo.carlini@oracle.com>
>> //
>> diff --git
>> a/libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_data.cc
>> b/libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_data.cc
>> index 43985b5b734..7b2cc7b5b40 100644
>> ---
>> a/libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_data.cc
>> +++
>> b/libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_data.cc
>> @@ -1,4 +1,5 @@
>> // { dg-do compile { target c++11 } }
>> +// { dg-additional-options "-Wno-deprecated-declarations" { target c++23
>> } }
>>
>> // Copyright (C) 2010-2026 Free Software Foundation, Inc.
>> //
>> diff --git
>> a/libstdc++-v3/testsuite/18_support/numeric_limits/specialization_default_values.cc
>> b/libstdc++-v3/testsuite/18_support/numeric_limits/specialization_default_values.cc
>> index 1bff0ad7f4d..896a2e485d7 100644
>> ---
>> a/libstdc++-v3/testsuite/18_support/numeric_limits/specialization_default_values.cc
>> +++
>> b/libstdc++-v3/testsuite/18_support/numeric_limits/specialization_default_values.cc
>> @@ -1,4 +1,5 @@
>> // { dg-add-options ieee }
>> +// { dg-additional-options "-Wno-deprecated-declarations" { target c++23
>> } }
>>
>> // 1999-08-23 bkoz
>>
>> diff --git a/libstdc++-v3/testsuite/std/ranges/iota/max_size_type.cc
>> b/libstdc++-v3/testsuite/std/ranges/iota/max_size_type.cc
>> index af53718a95b..64436942033 100644
>> --- a/libstdc++-v3/testsuite/std/ranges/iota/max_size_type.cc
>> +++ b/libstdc++-v3/testsuite/std/ranges/iota/max_size_type.cc
>> @@ -17,6 +17,7 @@
>>
>> // { dg-do run { target c++20 } }
>> // { dg-timeout-factor 4 }
>> +// { dg-additional-options "-Wno-deprecated-declarations" { target c++23
>> } }
>>
>> #include <limits>
>> #include <ranges>
>> --
>> 2.52.0
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://gcc.gnu.org/pipermail/libstdc++/attachments/20260409/8ea58fa7/attachment-0001.htm>
More information about the Libstdc++
mailing list