PING: [PATCH] libstdc++: Deprecate numeric_limits::has_denorm (P2614R2)
Fernando Pelliccioni
fpelliccioni@gmail.com
Thu Apr 9 12:17:55 GMT 2026
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,
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/d3028ba1/attachment-0001.htm>
More information about the Libstdc++
mailing list