Skip to content

Commit 818ee8f

Browse files
authored
[libc++] Remove a bunch of forward declarations from __tree and simplify __is_tree_value_type (#152451)
1 parent 84b3158 commit 818ee8f

File tree

2 files changed

+10
-39
lines changed

2 files changed

+10
-39
lines changed

libcxx/include/__tree

Lines changed: 8 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,13 @@
2727
#include <__type_traits/copy_cvref.h>
2828
#include <__type_traits/enable_if.h>
2929
#include <__type_traits/invoke.h>
30-
#include <__type_traits/is_const.h>
3130
#include <__type_traits/is_constructible.h>
3231
#include <__type_traits/is_nothrow_assignable.h>
3332
#include <__type_traits/is_nothrow_constructible.h>
3433
#include <__type_traits/is_same.h>
34+
#include <__type_traits/is_specialization.h>
3535
#include <__type_traits/is_swappable.h>
3636
#include <__type_traits/remove_const.h>
37-
#include <__type_traits/remove_const_ref.h>
38-
#include <__type_traits/remove_cvref.h>
3937
#include <__utility/forward.h>
4038
#include <__utility/move.h>
4139
#include <__utility/pair.h>
@@ -51,13 +49,6 @@ _LIBCPP_PUSH_MACROS
5149

5250
_LIBCPP_BEGIN_NAMESPACE_STD
5351

54-
template <class _Tp, class _Compare, class _Allocator>
55-
class __tree;
56-
template <class _Tp, class _NodePtr, class _DiffType>
57-
class __tree_iterator;
58-
template <class _Tp, class _ConstNodePtr, class _DiffType>
59-
class __tree_const_iterator;
60-
6152
template <class _Pointer>
6253
class __tree_end_node;
6354
template <class _VoidPtr>
@@ -68,13 +59,6 @@ class __tree_node;
6859
template <class _Key, class _Value>
6960
struct __value_type;
7061

71-
template <class _Allocator>
72-
class __map_node_destructor;
73-
template <class _TreeIterator>
74-
class __map_iterator;
75-
template <class _TreeIterator>
76-
class __map_const_iterator;
77-
7862
/*
7963
8064
_NodePtr algorithms
@@ -492,16 +476,7 @@ _LIBCPP_HIDE_FROM_ABI void __tree_remove(_NodePtr __root, _NodePtr __z) _NOEXCEP
492476
// node traits
493477

494478
template <class _Tp>
495-
struct __is_tree_value_type_imp : false_type {};
496-
497-
template <class _Key, class _Value>
498-
struct __is_tree_value_type_imp<__value_type<_Key, _Value> > : true_type {};
499-
500-
template <class... _Args>
501-
struct __is_tree_value_type : false_type {};
502-
503-
template <class _One>
504-
struct __is_tree_value_type<_One> : __is_tree_value_type_imp<__remove_cvref_t<_One> > {};
479+
inline const bool __is_tree_value_type_v = __is_specialization_v<_Tp, __value_type>;
505480

506481
template <class _Tp>
507482
struct __get_tree_key_type {
@@ -974,23 +949,23 @@ public:
974949
return __emplace_hint_unique_key_args(__p, __x.first, std::forward<_Pp>(__x)).first;
975950
}
976951

977-
template <class _ValueT = _Tp, __enable_if_t<__is_tree_value_type<_ValueT>::value, int> = 0>
952+
template <class _ValueT = _Tp, __enable_if_t<__is_tree_value_type_v<_ValueT>, int> = 0>
978953
_LIBCPP_HIDE_FROM_ABI void
979954
__insert_unique_from_orphaned_node(const_iterator __p, __get_node_value_type_t<_Tp>&& __value) {
980955
__emplace_hint_unique(__p, const_cast<key_type&&>(__value.first), std::move(__value.second));
981956
}
982957

983-
template <class _ValueT = _Tp, __enable_if_t<!__is_tree_value_type<_ValueT>::value, int> = 0>
958+
template <class _ValueT = _Tp, __enable_if_t<!__is_tree_value_type_v<_ValueT>, int> = 0>
984959
_LIBCPP_HIDE_FROM_ABI void __insert_unique_from_orphaned_node(const_iterator __p, _Tp&& __value) {
985960
__emplace_hint_unique(__p, std::move(__value));
986961
}
987962

988-
template <class _ValueT = _Tp, __enable_if_t<__is_tree_value_type<_ValueT>::value, int> = 0>
963+
template <class _ValueT = _Tp, __enable_if_t<__is_tree_value_type_v<_ValueT>, int> = 0>
989964
_LIBCPP_HIDE_FROM_ABI void __insert_multi_from_orphaned_node(const_iterator __p, value_type&& __value) {
990965
__emplace_hint_multi(__p, const_cast<key_type&&>(__value.first), std::move(__value.second));
991966
}
992967

993-
template <class _ValueT = _Tp, __enable_if_t<!__is_tree_value_type<_ValueT>::value, int> = 0>
968+
template <class _ValueT = _Tp, __enable_if_t<!__is_tree_value_type_v<_ValueT>, int> = 0>
994969
_LIBCPP_HIDE_FROM_ABI void __insert_multi_from_orphaned_node(const_iterator __p, _Tp&& __value) {
995970
__emplace_hint_multi(__p, std::move(__value));
996971
}
@@ -1137,7 +1112,7 @@ private:
11371112
}
11381113
_LIBCPP_HIDE_FROM_ABI void __move_assign_alloc(__tree&, false_type) _NOEXCEPT {}
11391114

1140-
template <class _From, class _ValueT = _Tp, __enable_if_t<__is_tree_value_type<_ValueT>::value, int> = 0>
1115+
template <class _From, class _ValueT = _Tp, __enable_if_t<__is_tree_value_type_v<_ValueT>, int> = 0>
11411116
_LIBCPP_HIDE_FROM_ABI static void __assign_value(__get_node_value_type_t<value_type>& __lhs, _From&& __rhs) {
11421117
using __key_type = __remove_const_t<typename value_type::first_type>;
11431118

@@ -1147,7 +1122,7 @@ private:
11471122
__lhs.second = std::forward<_From>(__rhs).second;
11481123
}
11491124

1150-
template <class _To, class _From, class _ValueT = _Tp, __enable_if_t<!__is_tree_value_type<_ValueT>::value, int> = 0>
1125+
template <class _To, class _From, class _ValueT = _Tp, __enable_if_t<!__is_tree_value_type_v<_ValueT>, int> = 0>
11511126
_LIBCPP_HIDE_FROM_ABI static void __assign_value(_To& __lhs, _From&& __rhs) {
11521127
__lhs = std::forward<_From>(__rhs);
11531128
}

libcxx/include/__type_traits/is_specialization.h

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,11 @@
3030

3131
_LIBCPP_BEGIN_NAMESPACE_STD
3232

33-
#if _LIBCPP_STD_VER >= 17
34-
3533
template <class _Tp, template <class...> class _Template>
36-
inline constexpr bool __is_specialization_v = false; // true if and only if _Tp is a specialization of _Template
34+
inline const bool __is_specialization_v = false; // true if and only if _Tp is a specialization of _Template
3735

3836
template <template <class...> class _Template, class... _Args>
39-
inline constexpr bool __is_specialization_v<_Template<_Args...>, _Template> = true;
40-
41-
#endif // _LIBCPP_STD_VER >= 17
37+
inline const bool __is_specialization_v<_Template<_Args...>, _Template> = true;
4238

4339
_LIBCPP_END_NAMESPACE_STD
4440

0 commit comments

Comments
 (0)