On Wed, May 20, 2026 at 2:33 PM Jonathan Wakely <[email protected]> wrote:

> The paper P2614R2 was approved in Issaquah, 2023. It deprecates the
> float_denorm_style enumeration type, its enumerators, and the
> numeric_limits::has_denorm and numeric_limits::has_denorm_loss static
> data members.
>
> I don't understand why the std/ranges/iota/max_size_type.cc test doesn't
> get warnings for using numeric_limits::has_denorm{,_loss} only for using
> the enumerator.
>
After changing the above from a variable template to functions with separate
static_assert for each check, I got warnings for has_denom{_loss}, so
seem to relate to this specific formulation:
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 d200554cbd1..b52fab2102b 100644
--- a/libstdc++-v3/testsuite/std/ranges/iota/max_size_type.cc
+++ b/libstdc++-v3/testsuite/std/ranges/iota/max_size_type.cc
@@ -407,31 +407,34 @@ static_assert(max_diff_t(max_size_t(1)
              == numeric_limits<max_diff_t>::min());

 template <typename integer_class>
-constexpr bool verify_numeric_limits_values_not_meaningful_for = true
-       && (numeric_limits<integer_class>::max_digits10 == 0)
-       && (numeric_limits<integer_class>::min_exponent == 0)
-       && (numeric_limits<integer_class>::min_exponent10 == 0)
-       && (numeric_limits<integer_class>::max_exponent == 0)
-       && (numeric_limits<integer_class>::max_exponent10 == 0)
-       && !numeric_limits<integer_class>::is_iec559
-       && !numeric_limits<integer_class>::has_infinity
-       && !numeric_limits<integer_class>::has_quiet_NaN
-       && !numeric_limits<integer_class>::has_signaling_NaN
-       && !numeric_limits<integer_class>::has_denorm_loss
-       && !numeric_limits<integer_class>::tinyness_before
-       && (numeric_limits<integer_class>::has_denorm == std::denorm_absent)
-       && (numeric_limits<integer_class>::round_style ==
std::round_toward_zero)
-       && (numeric_limits<integer_class>::denorm_min() == 0)
-       && (numeric_limits<integer_class>::epsilon() == 0)
-       && (numeric_limits<integer_class>::round_error() == 0)
-       && (numeric_limits<integer_class>::infinity() == 0)
-       && (numeric_limits<integer_class>::quiet_NaN() == 0)
-       && (numeric_limits<integer_class>::signaling_NaN() == 0);
+constexpr bool verify_numeric_limits_values_not_meaningful_for()
+{
+       static_assert(numeric_limits<integer_class>::max_digits10 == 0);
+       static_assert(numeric_limits<integer_class>::min_exponent == 0);
+       static_assert(numeric_limits<integer_class>::min_exponent10 == 0);
+       static_assert(numeric_limits<integer_class>::max_exponent == 0);
+       static_assert(numeric_limits<integer_class>::max_exponent10 == 0);
+       static_assert(!numeric_limits<integer_class>::is_iec559);
+       static_assert(!numeric_limits<integer_class>::has_infinity);
+       static_assert(!numeric_limits<integer_class>::has_quiet_NaN);
+       static_assert(!numeric_limits<integer_class>::has_signaling_NaN);
+       static_assert(!numeric_limits<integer_class>::has_denorm_loss);
+       static_assert(!numeric_limits<integer_class>::tinyness_before);
+       static_assert(numeric_limits<integer_class>::has_denorm ==
std::denorm_absent);
+       static_assert(numeric_limits<integer_class>::round_style ==
std::round_toward_zero);
+       static_assert(numeric_limits<integer_class>::denorm_min() == 0);
+       static_assert(numeric_limits<integer_class>::epsilon() == 0);
+       static_assert(numeric_limits<integer_class>::round_error() == 0);
+       static_assert(numeric_limits<integer_class>::infinity() == 0);
+       static_assert(numeric_limits<integer_class>::quiet_NaN() == 0);
+       static_assert(numeric_limits<integer_class>::signaling_NaN() == 0);
+       return true;
+}

 // { dg-warning "denorm_absent' is deprecated" "" { target c++23 } 422 }

-static_assert(verify_numeric_limits_values_not_meaningful_for<max_size_t>);
-static_assert(verify_numeric_limits_values_not_meaningful_for<max_diff_t>);
+static_assert(verify_numeric_limits_values_not_meaningful_for<max_size_t>());
+static_assert(verify_numeric_limits_values_not_meaningful_for<max_diff_t>());


> libstdc++-v3/ChangeLog:
>
>         * doc/xml/manual/evolution.xml: Document deprecations.
>         * doc/html/manual/api.html: Regenerate.
>         * include/bits/max_size_type.h (numeric_limits::has_denorm):
>         Mark as deprecated.
>         (numeric_limits::has_denorm_loss): Likewise.
>         * include/std/limits (float_denorm_style): Mark as deprecated.
>         (numeric_limits::has_denorm, numeric_limits::has_denorm_loss):
>         Mark as deprecated.
>         * testsuite/18_support/numeric_limits/char16_32_t.cc: Add
>         dg-warning for expected deprecation warnings.
>         * 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.
> ---
>
> Tested x86_64-linux.
>
LTGM. I like separate static_asserts inside a function for ranges
max_size_type,
as they would it clear what check failed, if it fails, so would do that
change.
But not necessary, so I am OK either way.

>
>  libstdc++-v3/doc/html/manual/api.html         |  5 ++
>  libstdc++-v3/doc/xml/manual/evolution.xml     |  8 +++
>  libstdc++-v3/include/bits/max_size_type.h     | 10 ++++
>  libstdc++-v3/include/std/limits               | 59 +++++++++++++++++--
>  .../18_support/numeric_limits/char16_32_t.cc  |  3 +
>  .../18_support/numeric_limits/char8_t.cc      |  3 +
>  .../18_support/numeric_limits/denorm_min.cc   |  2 +
>  .../18_support/numeric_limits/dr559.cc        |  2 +
>  .../requirements/constexpr_data.cc            |  3 +
>  .../specialization_default_values.cc          |  2 +
>  .../std/ranges/iota/max_size_type.cc          |  2 +
>  11 files changed, 95 insertions(+), 4 deletions(-)
>
> diff --git a/libstdc++-v3/doc/html/manual/api.html
> b/libstdc++-v3/doc/html/manual/api.html
> index 4fce14127ef8..2398bf495361 100644
> --- a/libstdc++-v3/doc/html/manual/api.html
> +++ b/libstdc++-v3/doc/html/manual/api.html
> @@ -519,4 +519,9 @@ Made <code
> class="code">std::is_integral_v&lt;__int128&gt;</code> true for stric
>  Removed allocator-extended constructors and support for uses-allocator
>  construction from <code class="classname">std::promise</code> and
>  <code class="classname">std::packaged_task</code>.
> +</p><p>
> +<code class="code">std::numeric_limits::has_denorm</code>,
> +<code class="code">std::numeric_limits::has_denorm_loss</code>,
> +and <code class="code">enum std::float_denorm_style</code> and its
> enumerators
> +were deprecated for C++23.
>  </p></div></div><div class="navfooter"><hr /><table width="100%"
> summary="Navigation footer"><tr><td width="40%" align="left"><a
> accesskey="p" href="abi.html">Prev</a> </td><td width="20%"
> align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td
> width="40%" align="right"> <a accesskey="n"
> href="backwards.html">Next</a></td></tr><tr><td width="40%" align="left"
> valign="top">ABI Policy and Guidelines </td><td width="20%"
> align="center"><a accesskey="h" href="../index.html">Home</a></td><td
> width="40%" align="right" valign="top"> Backwards
> Compatibility</td></tr></table></div></body></html>
> \ No newline at end of file
> diff --git a/libstdc++-v3/doc/xml/manual/evolution.xml
> b/libstdc++-v3/doc/xml/manual/evolution.xml
> index 2ebdebc98204..8c471cca5b89 100644
> --- a/libstdc++-v3/doc/xml/manual/evolution.xml
> +++ b/libstdc++-v3/doc/xml/manual/evolution.xml
> @@ -1170,6 +1170,14 @@ Removed allocator-extended constructors and support
> for uses-allocator
>  construction from <classname>std::promise</classname> and
>  <classname>std::packaged_task</classname>.
>  </para>
> +
> +<para>
> +<code>std::numeric_limits::has_denorm</code>,
> +<code>std::numeric_limits::has_denorm_loss</code>,
> +and <code>enum std::float_denorm_style</code> and its enumerators
> +were deprecated for C++23.
> +</para>
> +
>  </section>
>
>  </section>
> diff --git a/libstdc++-v3/include/bits/max_size_type.h
> b/libstdc++-v3/include/bits/max_size_type.h
> index 042aad10a138..28596f0dd51f 100644
> --- a/libstdc++-v3/include/bits/max_size_type.h
> +++ b/libstdc++-v3/include/bits/max_size_type.h
> @@ -791,9 +791,14 @@ namespace ranges
>        static constexpr bool has_infinity = false;
>        static constexpr bool has_quiet_NaN = false;
>        static constexpr bool has_signaling_NaN = false;
> +      _GLIBCXX23_DEPRECATED
>        static constexpr bool has_denorm_loss = false;
>        static constexpr bool tinyness_before = false;
> +#pragma GCC diagnostic push
> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" //
> denorm_absent
> +      _GLIBCXX23_DEPRECATED
>        static constexpr float_denorm_style has_denorm = denorm_absent;
> +#pragma GCC diagnostic pop
>        static constexpr float_round_style round_style = round_toward_zero;
>
>        static constexpr _Sp
> @@ -858,9 +863,14 @@ namespace ranges
>        static constexpr bool has_infinity = false;
>        static constexpr bool has_quiet_NaN = false;
>        static constexpr bool has_signaling_NaN = false;
> +      _GLIBCXX23_DEPRECATED
>        static constexpr bool has_denorm_loss = false;
>        static constexpr bool tinyness_before = false;
> +#pragma GCC diagnostic push
> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
> +      _GLIBCXX23_DEPRECATED
>        static constexpr float_denorm_style has_denorm = 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 cfdbe02c844c..4dc9c643bba6 100644
> --- a/libstdc++-v3/include/std/limits
> +++ b/libstdc++-v3/include/std/limits
> @@ -45,6 +45,7 @@
>  #pragma GCC diagnostic ignored "-Wpedantic" // Q suffix
>  #pragma GCC diagnostic ignored "-Wlong-long"
>  #pragma GCC diagnostic ignored "-Wc++23-extensions"
> +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" // denorm enums
>
>  #include <bits/c++config.h>
>
> @@ -191,14 +192,14 @@ _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,
> +    denorm_indeterminate _GLIBCXX23_DEPRECATED = -1,
>      /// The type does not allow denormalized values.
> -    denorm_absent        = 0,
> +    denorm_absent        _GLIBCXX23_DEPRECATED = 0,
>      /// The type allows denormalized values.
> -    denorm_present       = 1
> +    denorm_present       _GLIBCXX23_DEPRECATED = 1
>    };
>
>    /**
> @@ -275,10 +276,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>      static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
>
>      /** See std::float_denorm_style for more information.  */
> +    _GLIBCXX23_DEPRECATED
>      static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm =
> denorm_absent;
>
>      /** True if loss of accuracy is detected as a denormalization loss,
>         rather than as an inexact result. */
> +    _GLIBCXX23_DEPRECATED
>      static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>
>      /** True if-and-only-if the type adheres to the IEC 559 standard, also
> @@ -431,8 +434,10 @@ _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;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>         = denorm_absent;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>
>        static _GLIBCXX_CONSTEXPR bool
> @@ -498,8 +503,10 @@ _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;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>         = denorm_absent;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>
>        static _GLIBCXX_CONSTEXPR
> @@ -566,8 +573,10 @@ _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;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>         = denorm_absent;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>
>        static _GLIBCXX_CONSTEXPR signed char
> @@ -637,8 +646,10 @@ _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;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>         = denorm_absent;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>
>        static _GLIBCXX_CONSTEXPR unsigned char
> @@ -709,8 +720,10 @@ _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;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>         = denorm_absent;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>
>        static _GLIBCXX_CONSTEXPR wchar_t
> @@ -773,8 +786,10 @@ _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;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>         = denorm_absent;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>
>        static _GLIBCXX_CONSTEXPR char8_t
> @@ -838,7 +853,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>        static constexpr bool has_infinity = false;
>        static constexpr bool has_quiet_NaN = false;
>        static constexpr bool has_signaling_NaN = false;
> +      _GLIBCXX23_DEPRECATED
>        static constexpr float_denorm_style has_denorm = denorm_absent;
> +      _GLIBCXX23_DEPRECATED
>        static constexpr bool has_denorm_loss = false;
>
>        static constexpr char16_t
> @@ -899,7 +916,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>        static constexpr bool has_infinity = false;
>        static constexpr bool has_quiet_NaN = false;
>        static constexpr bool has_signaling_NaN = false;
> +      _GLIBCXX23_DEPRECATED
>        static constexpr float_denorm_style has_denorm = denorm_absent;
> +      _GLIBCXX23_DEPRECATED
>        static constexpr bool has_denorm_loss = false;
>
>        static constexpr char32_t
> @@ -965,8 +984,10 @@ _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;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>         = denorm_absent;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>
>        static _GLIBCXX_CONSTEXPR short
> @@ -1034,8 +1055,10 @@ _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;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>         = denorm_absent;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>
>        static _GLIBCXX_CONSTEXPR unsigned short
> @@ -1105,8 +1128,10 @@ _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;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>         = denorm_absent;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>
>        static _GLIBCXX_CONSTEXPR int
> @@ -1174,8 +1199,10 @@ _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;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>         = denorm_absent;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>
>        static _GLIBCXX_CONSTEXPR unsigned int
> @@ -1244,8 +1271,10 @@ _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;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>         = denorm_absent;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>
>        static _GLIBCXX_CONSTEXPR long
> @@ -1313,8 +1342,10 @@ _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;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>         = denorm_absent;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>
>        static _GLIBCXX_CONSTEXPR unsigned long
> @@ -1386,8 +1417,10 @@ _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;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>         = denorm_absent;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>
>        static _GLIBCXX_CONSTEXPR long long
> @@ -1456,8 +1489,10 @@ _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;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>         = denorm_absent;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>
>        static _GLIBCXX_CONSTEXPR unsigned long long
> @@ -1525,8 +1560,10 @@ _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;    \
> +      _GLIBCXX23_DEPRECATED                                            \
>        static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm      \
>         = denorm_absent;                                                \
> +      _GLIBCXX23_DEPRECATED                                            \
>        static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;      \
>                                                                         \
>        static _GLIBCXX_CONSTEXPR TYPE                                   \
> @@ -1594,8 +1631,10 @@ _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;    \
> +      _GLIBCXX23_DEPRECATED                                            \
>        static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm      \
>         = denorm_absent;                                                \
> +      _GLIBCXX23_DEPRECATED                                            \
>        static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;      \
>                                                                         \
>        static _GLIBCXX_CONSTEXPR unsigned TYPE                          \
> @@ -1715,8 +1754,10 @@ _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;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>         = bool(__FLT_HAS_DENORM__) ? denorm_present : denorm_absent;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
>         = __glibcxx_float_has_denorm_loss;
>
> @@ -1790,8 +1831,10 @@ _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;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>         = bool(__DBL_HAS_DENORM__) ? denorm_present : denorm_absent;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
>          = __glibcxx_double_has_denorm_loss;
>
> @@ -1865,8 +1908,10 @@ _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;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>         = bool(__LDBL_HAS_DENORM__) ? denorm_present : denorm_absent;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss
>         = __glibcxx_long_double_has_denorm_loss;
>
> @@ -1958,9 +2003,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>         = __glibcxx_concat3 (__FLT, BITSIZE, _HAS_QUIET_NAN__);         \
>        static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN             \
>         = has_quiet_NaN;                                                \
> +      _GLIBCXX23_DEPRECATED                                            \
>        static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm      \
>         = bool(__glibcxx_concat3 (__FLT, BITSIZE, _HAS_DENORM__))       \
>           ? denorm_present : denorm_absent;                             \
> +      _GLIBCXX23_DEPRECATED                                            \
>        static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;      \
>                                                                         \
>        static _GLIBCXX_CONSTEXPR _Float##BITSIZE
>       \
> @@ -2057,8 +2104,10 @@ __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;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>         = bool(__BFLT16_HAS_DENORM__) ? denorm_present : denorm_absent;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>
>        static _GLIBCXX_CONSTEXPR __gnu_cxx::__bfloat16_t
> @@ -2157,8 +2206,10 @@ __glibcxx_float_n(128)
>  #else
>        static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false;
>  #endif
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
>         = denorm_present;
> +      _GLIBCXX23_DEPRECATED
>        static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false;
>
>        static _GLIBCXX_CONSTEXPR __float128
> 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 2c8712c861cd..8bedf48ceb4a 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
> @@ -66,6 +66,9 @@ template<typename T, typename R>
>      VERIFY( char_type::round_style == impl_type::round_style );
>    }
>
> +// { dg-warning "has_denorm' is deprecated" "" { target c++23 } 55 }
> +// { dg-warning "has_denorm_loss' is deprecated" "" { target c++23 } 56 }
> +
>  int main()
>  {
>    do_test<char16_t, std::uint_least16_t>();
> 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 e23dbb7adbf6..a114860610e8 100644
> --- a/libstdc++-v3/testsuite/18_support/numeric_limits/char8_t.cc
> +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/char8_t.cc
> @@ -63,6 +63,9 @@ template<typename T, typename R>
>      VERIFY( char_type::round_style == impl_type::round_style );
>    }
>
> +// { dg-warning "has_denorm' is deprecated" "" { target c++23 } 52 }
> +// { dg-warning "has_denorm_loss' is deprecated" "" { target c++23 } 53 }
> +
>  int main()
>  {
>    do_test<char8_t, unsigned char>();
> 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 b508d082b8e7..d4113ebf3d8d 100644
> --- a/libstdc++-v3/testsuite/18_support/numeric_limits/denorm_min.cc
> +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/denorm_min.cc
> @@ -43,6 +43,8 @@ test_denorm_min()
>
>    VERIFY (test);
>  }
> +// { dg-warning "has_denorm' is deprecated" "" { target c++23 } 36 }
> +// { dg-warning "denorm_present' is deprecated" "" { target c++23 } 36 }
>
>  int main()
>  {
> diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc
> b/libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc
> index 88c0ca505f28..a329b80fc8e5 100644
> --- a/libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc
> +++ b/libstdc++-v3/testsuite/18_support/numeric_limits/dr559.cc
> @@ -65,6 +65,8 @@ template<typename T>
>      VERIFY( cv_limits::tinyness_before == limits::tinyness_before );
>      VERIFY( cv_limits::round_style == limits::round_style );
>    }
> +// { dg-warning "has_denorm' is deprecated" "" { target c++23 } 52 }
> +// { dg-warning "has_denorm_loss' is deprecated" "" { target c++23 } 53 }
>
>  template<typename T>
>    void
> 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 43985b5b7348..5cd53b35f5ed 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
> @@ -88,6 +88,9 @@ namespace __gnu_test
>        }
>    };
>  }
> +// { dg-warning "float_denorm_style' is deprecated" "" { target c++23 }
> 67 }
> +// { dg-warning "has_denorm' is deprecated" "" { target c++23 } 68 }
> +// { dg-warning "has_denorm_loss' is deprecated" "" { target c++23 } 70 }
>
>  int main()
>  {
> 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 1bff0ad7f4d6..63a42bee0e15 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
> @@ -78,6 +78,8 @@ void test01()
>    VERIFY( !obj.tinyness_before );
>    VERIFY( obj.round_style == std::round_toward_zero );
>  }
> +// { dg-warning "has_denorm' is deprecated" "" { target c++23 } 68 }
> +// { dg-warning "has_denorm_loss' is deprecated" "" { target c++23 } 69 }
>
>  // test linkage of the generic bits
>  template struct std::numeric_limits<B>;
> 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 af53718a95b3..d200554cbd16 100644
> --- a/libstdc++-v3/testsuite/std/ranges/iota/max_size_type.cc
> +++ b/libstdc++-v3/testsuite/std/ranges/iota/max_size_type.cc
> @@ -428,6 +428,8 @@ constexpr bool
> verify_numeric_limits_values_not_meaningful_for = true
>         && (numeric_limits<integer_class>::quiet_NaN() == 0)
>         && (numeric_limits<integer_class>::signaling_NaN() == 0);
>
> +// { dg-warning "denorm_absent' is deprecated" "" { target c++23 } 422 }
> +
>
>  static_assert(verify_numeric_limits_values_not_meaningful_for<max_size_t>);
>
>  static_assert(verify_numeric_limits_values_not_meaningful_for<max_diff_t>);
>
> --
> 2.54.0
>
>

Reply via email to