aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorPatrick Palka <ppalka@redhat.com>2022-09-02 15:16:37 -0400
committerPatrick Palka <ppalka@redhat.com>2022-09-02 15:16:37 -0400
commit68c23af0dd7403c95c43310edc15669d4dacb005 (patch)
treec9b7264916d8bda7f3214b67c098d1cbe25e0430 /libstdc++-v3
parentb6aa7d45b502c01f8703c8d2cee2690f9aa8e282 (diff)
downloadgcc-68c23af0dd7403c95c43310edc15669d4dacb005.zip
gcc-68c23af0dd7403c95c43310edc15669d4dacb005.tar.gz
gcc-68c23af0dd7403c95c43310edc15669d4dacb005.tar.bz2
libstdc++: Consistently use ::type when deriving from __and/or/not_
Now that these internal type traits are (again) class templates, it's better to derive from the trait's ::type instead of from the trait itself, for sake of a shallower inheritance chain. libstdc++-v3/ChangeLog: * include/std/tuple (tuple::_UseOtherCtor): Use ::type when deriving from __and_, __or_ or __not_. * include/std/type_traits (negation): Likewise. (is_unsigned): Likewise. (__is_implicitly_default_constructible): Likewise. (is_trivially_destructible): Likewise. (__is_nt_invocable_impl): Likewise.
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/include/std/tuple2
-rw-r--r--libstdc++-v3/include/std/type_traits10
2 files changed, 6 insertions, 6 deletions
diff --git a/libstdc++-v3/include/std/tuple b/libstdc++-v3/include/std/tuple
index ddd7c22..26e2484 100644
--- a/libstdc++-v3/include/std/tuple
+++ b/libstdc++-v3/include/std/tuple
@@ -826,7 +826,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// then TUPLE should match tuple(UTypes&&...) instead.
template<typename _Tuple, typename _Tp, typename _Up>
struct _UseOtherCtor<_Tuple, tuple<_Tp>, tuple<_Up>>
- : __or_<is_convertible<_Tuple, _Tp>, is_constructible<_Tp, _Tuple>>
+ : __or_<is_convertible<_Tuple, _Tp>, is_constructible<_Tp, _Tuple>>::type
{ };
// If TUPLE and *this each have a single element of the same type,
// then TUPLE should match a copy/move constructor instead.
diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits
index 2f5fe80..c7a9607 100644
--- a/libstdc++-v3/include/std/type_traits
+++ b/libstdc++-v3/include/std/type_traits
@@ -235,7 +235,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Pp>
struct negation
- : __not_<_Pp>
+ : __not_<_Pp>::type
{ };
/** @ingroup variable_templates
@@ -845,7 +845,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/// is_unsigned
template<typename _Tp>
struct is_unsigned
- : public __and_<is_arithmetic<_Tp>, __not_<is_signed<_Tp>>>
+ : public __and_<is_arithmetic<_Tp>, __not_<is_signed<_Tp>>>::type
{ };
/// @cond undocumented
@@ -1222,7 +1222,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template <typename _Tp>
struct __is_implicitly_default_constructible
: public __and_<__is_constructible_impl<_Tp>,
- __is_implicitly_default_constructible_safe<_Tp>>
+ __is_implicitly_default_constructible_safe<_Tp>>::type
{ };
/// is_trivially_copy_constructible
@@ -1282,7 +1282,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp>
struct is_trivially_destructible
: public __and_<__is_destructible_safe<_Tp>,
- __bool_constant<__has_trivial_destructor(_Tp)>>
+ __bool_constant<__has_trivial_destructor(_Tp)>>::type
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
@@ -2975,7 +2975,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct __is_nt_invocable_impl<_Result, _Ret,
__void_t<typename _Result::type>>
: __or_<is_void<_Ret>,
- __is_nothrow_convertible<typename _Result::type, _Ret>>
+ __is_nothrow_convertible<typename _Result::type, _Ret>>::type
{ };
/// @endcond