27
27
#include < __type_traits/copy_cvref.h>
28
28
#include < __type_traits/enable_if.h>
29
29
#include < __type_traits/invoke.h>
30
- #include < __type_traits/is_const.h>
31
30
#include < __type_traits/is_constructible.h>
32
31
#include < __type_traits/is_nothrow_assignable.h>
33
32
#include < __type_traits/is_nothrow_constructible.h>
34
33
#include < __type_traits/is_same.h>
34
+ #include < __type_traits/is_specialization.h>
35
35
#include < __type_traits/is_swappable.h>
36
36
#include < __type_traits/remove_const.h>
37
- #include < __type_traits/remove_const_ref.h>
38
- #include < __type_traits/remove_cvref.h>
39
37
#include < __utility/forward.h>
40
38
#include < __utility/move.h>
41
39
#include < __utility/pair.h>
@@ -51,13 +49,6 @@ _LIBCPP_PUSH_MACROS
51
49
52
50
_LIBCPP_BEGIN_NAMESPACE_STD
53
51
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
-
61
52
template <class _Pointer >
62
53
class __tree_end_node ;
63
54
template <class _VoidPtr >
@@ -68,13 +59,6 @@ class __tree_node;
68
59
template <class _Key , class _Value >
69
60
struct __value_type ;
70
61
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
-
78
62
/*
79
63
80
64
_NodePtr algorithms
@@ -492,16 +476,7 @@ _LIBCPP_HIDE_FROM_ABI void __tree_remove(_NodePtr __root, _NodePtr __z) _NOEXCEP
492
476
// node traits
493
477
494
478
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>;
505
480
506
481
template <class _Tp >
507
482
struct __get_tree_key_type {
@@ -974,23 +949,23 @@ public:
974
949
return __emplace_hint_unique_key_args (__p, __x.first , std::forward<_Pp>(__x)).first ;
975
950
}
976
951
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 >
978
953
_LIBCPP_HIDE_FROM_ABI void
979
954
__insert_unique_from_orphaned_node (const_iterator __p, __get_node_value_type_t <_Tp>&& __value) {
980
955
__emplace_hint_unique (__p, const_cast <key_type&&>(__value.first ), std::move (__value.second ));
981
956
}
982
957
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 >
984
959
_LIBCPP_HIDE_FROM_ABI void __insert_unique_from_orphaned_node (const_iterator __p, _Tp&& __value) {
985
960
__emplace_hint_unique (__p, std::move (__value));
986
961
}
987
962
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 >
989
964
_LIBCPP_HIDE_FROM_ABI void __insert_multi_from_orphaned_node (const_iterator __p, value_type&& __value) {
990
965
__emplace_hint_multi (__p, const_cast <key_type&&>(__value.first ), std::move (__value.second ));
991
966
}
992
967
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 >
994
969
_LIBCPP_HIDE_FROM_ABI void __insert_multi_from_orphaned_node (const_iterator __p, _Tp&& __value) {
995
970
__emplace_hint_multi (__p, std::move (__value));
996
971
}
@@ -1137,7 +1112,7 @@ private:
1137
1112
}
1138
1113
_LIBCPP_HIDE_FROM_ABI void __move_assign_alloc (__tree&, false_type) _NOEXCEPT {}
1139
1114
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 >
1141
1116
_LIBCPP_HIDE_FROM_ABI static void __assign_value (__get_node_value_type_t <value_type>& __lhs, _From&& __rhs) {
1142
1117
using __key_type = __remove_const_t <typename value_type::first_type>;
1143
1118
@@ -1147,7 +1122,7 @@ private:
1147
1122
__lhs.second = std::forward<_From>(__rhs).second ;
1148
1123
}
1149
1124
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 >
1151
1126
_LIBCPP_HIDE_FROM_ABI static void __assign_value (_To& __lhs, _From&& __rhs) {
1152
1127
__lhs = std::forward<_From>(__rhs);
1153
1128
}
0 commit comments