Hello, Finally, this commit deprecates is_trivial and is_trivial_v in C++26.
Thanks, -- Giuseppe D'Angelo
From 976ad3ec85cdd6fbd6eea7495077ef5b602cf088 Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo <giuseppe.dang...@kdab.com> Date: Mon, 9 Dec 2024 01:28:08 +0100 Subject: [PATCH 6/6] libstdc++: deprecate is_trivial (P3247R2) This actually implements P3247R2 by deprecating the is_trivial type trait. libstdc++-v3/ChangeLog: * include/std/type_traits: Deprecate is_trivial and is_trivial_v. * testsuite/20_util/is_trivial/requirements/explicit_instantiation.cc: Amend the test to suppress the deprecation warning. * testsuite/20_util/is_trivial/requirements/typedefs.cc: Likewise. * testsuite/20_util/is_trivial/value.cc: Likewise. * testsuite/20_util/variable_templates_for_traits.cc: Likewise. * testsuite/experimental/type_traits/value.cc: Likewise. * testsuite/18_support/max_align_t/requirements/2.cc: Update the test with P3247R2's new wording. Signed-off-by: Giuseppe D'Angelo <giuseppe.dang...@kdab.com> --- libstdc++-v3/include/std/type_traits | 13 +++++++++++-- .../18_support/max_align_t/requirements/2.cc | 4 ++++ .../requirements/explicit_instantiation.cc | 3 +++ .../20_util/is_trivial/requirements/typedefs.cc | 3 +++ libstdc++-v3/testsuite/20_util/is_trivial/value.cc | 3 +++ .../20_util/variable_templates_for_traits.cc | 4 ++++ .../testsuite/experimental/type_traits/value.cc | 4 ++++ 7 files changed, 32 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index c650094f8c5..ae410f05a9c 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -885,9 +885,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION : public true_type { }; #endif - /// is_trivial + /** is_trivial + * @deprecated Deprecated in C++26. + * Use a combination of one or more more specialized type traits instead, + * such as `is_trivially_default_constructible`, + * `is_trivially_copy_constructible`, `is_trivially_copy_assignable`, + * etc., depending on the exact check(s) needed. + */ template<typename _Tp> - struct is_trivial + struct + _GLIBCXX26_DEPRECATED_SUGGEST("is_trivially_default_constructible && is_trivially_copyable") + is_trivial : public __bool_constant<__is_trivial(_Tp)> { static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), @@ -3518,6 +3526,7 @@ template <typename _Tp> #endif template <typename _Tp> + _GLIBCXX26_DEPRECATED_SUGGEST("is_trivially_default_constructible_v && is_trivially_copyable_v") inline constexpr bool is_trivial_v = __is_trivial(_Tp); template <typename _Tp> inline constexpr bool is_trivially_copyable_v = __is_trivially_copyable(_Tp); diff --git a/libstdc++-v3/testsuite/18_support/max_align_t/requirements/2.cc b/libstdc++-v3/testsuite/18_support/max_align_t/requirements/2.cc index b61a4b2b35d..c496ad67425 100644 --- a/libstdc++-v3/testsuite/18_support/max_align_t/requirements/2.cc +++ b/libstdc++-v3/testsuite/18_support/max_align_t/requirements/2.cc @@ -24,4 +24,8 @@ static_assert (std::is_pod<std::max_align_t>::value, ""); #endif static_assert (std::is_standard_layout<std::max_align_t>::value, ""); +static_assert (std::is_trivially_copyable<std::max_align_t>::value, ""); +static_assert (std::is_trivially_default_constructible<std::max_align_t>::value, ""); +#if __cplusplus <= 202302L static_assert (std::is_trivial<std::max_align_t>::value, ""); +#endif diff --git a/libstdc++-v3/testsuite/20_util/is_trivial/requirements/explicit_instantiation.cc b/libstdc++-v3/testsuite/20_util/is_trivial/requirements/explicit_instantiation.cc index bace0ed0058..e66b7d4b27d 100644 --- a/libstdc++-v3/testsuite/20_util/is_trivial/requirements/explicit_instantiation.cc +++ b/libstdc++-v3/testsuite/20_util/is_trivial/requirements/explicit_instantiation.cc @@ -25,5 +25,8 @@ namespace std { typedef short test_type; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" template struct is_trivial<test_type>; +#pragma GCC diagnostic pop } diff --git a/libstdc++-v3/testsuite/20_util/is_trivial/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/is_trivial/requirements/typedefs.cc index 218246ca3be..4e86fbafbde 100644 --- a/libstdc++-v3/testsuite/20_util/is_trivial/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/20_util/is_trivial/requirements/typedefs.cc @@ -26,7 +26,10 @@ void test01() { // Check for required typedefs +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" typedef std::is_trivial<int> test_type; +#pragma GCC diagnostic pop typedef test_type::value_type value_type; typedef test_type::type type; typedef test_type::type::value_type type_value_type; diff --git a/libstdc++-v3/testsuite/20_util/is_trivial/value.cc b/libstdc++-v3/testsuite/20_util/is_trivial/value.cc index 22acec26b2e..195f44dcb0c 100644 --- a/libstdc++-v3/testsuite/20_util/is_trivial/value.cc +++ b/libstdc++-v3/testsuite/20_util/is_trivial/value.cc @@ -27,9 +27,12 @@ void test01() using std::is_trivial; using namespace __gnu_test; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" static_assert(test_category<is_trivial, TType>(true), ""); static_assert(test_category<is_trivial, PODType>(true), ""); static_assert(test_category<is_trivial, NType>(false), ""); static_assert(test_category<is_trivial, SLType>(false), ""); +#pragma GCC diagnostic pop } diff --git a/libstdc++-v3/testsuite/20_util/variable_templates_for_traits.cc b/libstdc++-v3/testsuite/20_util/variable_templates_for_traits.cc index 5a1b777078b..2984a0e67af 100644 --- a/libstdc++-v3/testsuite/20_util/variable_templates_for_traits.cc +++ b/libstdc++-v3/testsuite/20_util/variable_templates_for_traits.cc @@ -129,8 +129,12 @@ private: int i2; }; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" +// Deprecated in C++26 static_assert(is_trivial_v<int> && is_trivial<int>::value, ""); static_assert(!is_trivial_v<NType> && !is_trivial<NType>::value, ""); +#pragma GCC diagnostic pop static_assert(is_trivially_copyable_v<int> && is_trivially_copyable<int>::value, ""); diff --git a/libstdc++-v3/testsuite/experimental/type_traits/value.cc b/libstdc++-v3/testsuite/experimental/type_traits/value.cc index b33b0150ceb..6dfc835d78a 100644 --- a/libstdc++-v3/testsuite/experimental/type_traits/value.cc +++ b/libstdc++-v3/testsuite/experimental/type_traits/value.cc @@ -196,8 +196,12 @@ private: int i2; }; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" +// Deprecated in C++26 static_assert(is_trivial_v<int> && is_trivial<int>::value, ""); static_assert(!is_trivial_v<NType> && !is_trivial<NType>::value, ""); +#pragma GCC diagnostic pop static_assert(is_trivially_copyable_v<int> && is_trivially_copyable<int>::value, ""); -- 2.34.1
smime.p7s
Description: S/MIME Cryptographic Signature