diff --git a/libstdc++-v3/include/experimental/type_traits b/libstdc++-v3/include/experimental/type_traits index 25bb217442072cc9d3090d803b05adf60bc6f3c0..917ac2d34053a8d6ba2a99dfea877d61863bba66 100644 --- a/libstdc++-v3/include/experimental/type_traits +++ b/libstdc++-v3/include/experimental/type_traits @@ -121,8 +121,11 @@ template <typename _Tp> constexpr bool is_const_v = is_const<_Tp>::value; template <typename _Tp> constexpr bool is_volatile_v = is_volatile<_Tp>::value; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" template <typename _Tp> constexpr bool is_trivial_v = is_trivial<_Tp>::value; +#pragma GCC diagnostic pop template <typename _Tp> constexpr bool is_trivially_copyable_v = is_trivially_copyable<_Tp>::value; template <typename _Tp> diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index c650094f8c52aa8fce97f5cd76da7e30afa4358c..ae410f05a9cd41dfab554c20f41e5015d602798a 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 b61a4b2b35d40c650aee63eef2172b75f8378286..c496ad674254f7980486e7af668e11a2143d8118 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 bace0ed00583ad3c3a84cb6e3cb0e5c565221485..e66b7d4b27d9dbf875ae119ea4c4ab2f80f634f6 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 218246ca3be2058adda9a3514846892097953dec..4e86fbafbded5a5af0133ec94e09fa3b28dd1130 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 22acec26b2efadbb7f7e8bd637ec2e2f57067902..195f44dcb0c6a0a1805b2f580764a870c3b790f2 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 5a1b777078bb3b63f9b5173b7c811967a4d2ae21..2984a0e67af084b5589cf29d2515901c9b90b0ca 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 b33b0150ceb99cf28b344814824da7a88c477b46..6dfc835d78aa5255c3a239ad0512f4b3cddbd2c5 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, "");