@@ -594,8 +594,6 @@ template <class _NodePtr, class _Tp, class _VoidPtr>
594
594
struct __tree_node_types <_NodePtr, __tree_node<_Tp, _VoidPtr> >
595
595
: public __tree_node_base_types<_VoidPtr>, __tree_key_value_types<_Tp>, __tree_map_pointer_types<_Tp, _VoidPtr> {
596
596
typedef __tree_node_base_types<_VoidPtr> __base;
597
- typedef __tree_key_value_types<_Tp> __key_base;
598
- typedef __tree_map_pointer_types<_Tp, _VoidPtr> __map_pointer_base;
599
597
600
598
public:
601
599
typedef typename pointer_traits<_NodePtr>::element_type __node_type;
@@ -604,7 +602,6 @@ public:
604
602
typedef _Tp __node_value_type;
605
603
typedef __rebind_pointer_t <_VoidPtr, __node_value_type> __node_value_type_pointer;
606
604
typedef __rebind_pointer_t <_VoidPtr, const __node_value_type> __const_node_value_type_pointer;
607
- typedef typename __base::__end_node_pointer __iter_pointer;
608
605
609
606
private:
610
607
static_assert (!is_const<__node_type>::value, " _NodePtr should never be a pointer to const" );
@@ -712,10 +709,9 @@ class __tree_iterator {
712
709
typedef _NodePtr __node_pointer;
713
710
typedef typename _NodeTypes::__node_base_pointer __node_base_pointer;
714
711
typedef typename _NodeTypes::__end_node_pointer __end_node_pointer;
715
- typedef typename _NodeTypes::__iter_pointer __iter_pointer;
716
712
typedef pointer_traits<__node_pointer> __pointer_traits;
717
713
718
- __iter_pointer __ptr_;
714
+ __end_node_pointer __ptr_;
719
715
720
716
public:
721
717
typedef bidirectional_iterator_tag iterator_category;
@@ -735,8 +731,7 @@ public:
735
731
_LIBCPP_HIDE_FROM_ABI pointer operator ->() const { return pointer_traits<pointer>::pointer_to (__get_np ()->__value_ ); }
736
732
737
733
_LIBCPP_HIDE_FROM_ABI __tree_iterator& operator ++() {
738
- __ptr_ = static_cast <__iter_pointer>(
739
- std::__tree_next_iter<__end_node_pointer>(static_cast <__node_base_pointer>(__ptr_)));
734
+ __ptr_ = std::__tree_next_iter<__end_node_pointer>(static_cast <__node_base_pointer>(__ptr_));
740
735
return *this ;
741
736
}
742
737
_LIBCPP_HIDE_FROM_ABI __tree_iterator operator ++(int ) {
@@ -746,8 +741,7 @@ public:
746
741
}
747
742
748
743
_LIBCPP_HIDE_FROM_ABI __tree_iterator& operator --() {
749
- __ptr_ = static_cast <__iter_pointer>(
750
- std::__tree_prev_iter<__node_base_pointer>(static_cast <__end_node_pointer>(__ptr_)));
744
+ __ptr_ = static_cast <__end_node_pointer>(std::__tree_prev_iter<__node_base_pointer>(__ptr_));
751
745
return *this ;
752
746
}
753
747
_LIBCPP_HIDE_FROM_ABI __tree_iterator operator --(int ) {
@@ -789,10 +783,9 @@ class __tree_const_iterator {
789
783
typedef typename _NodeTypes::__node_pointer __node_pointer;
790
784
typedef typename _NodeTypes::__node_base_pointer __node_base_pointer;
791
785
typedef typename _NodeTypes::__end_node_pointer __end_node_pointer;
792
- typedef typename _NodeTypes::__iter_pointer __iter_pointer;
793
786
typedef pointer_traits<__node_pointer> __pointer_traits;
794
787
795
- __iter_pointer __ptr_;
788
+ __end_node_pointer __ptr_;
796
789
797
790
public:
798
791
typedef bidirectional_iterator_tag iterator_category;
@@ -818,8 +811,7 @@ public:
818
811
_LIBCPP_HIDE_FROM_ABI pointer operator ->() const { return pointer_traits<pointer>::pointer_to (__get_np ()->__value_ ); }
819
812
820
813
_LIBCPP_HIDE_FROM_ABI __tree_const_iterator& operator ++() {
821
- __ptr_ = static_cast <__iter_pointer>(
822
- std::__tree_next_iter<__end_node_pointer>(static_cast <__node_base_pointer>(__ptr_)));
814
+ __ptr_ = std::__tree_next_iter<__end_node_pointer>(static_cast <__node_base_pointer>(__ptr_));
823
815
return *this ;
824
816
}
825
817
@@ -830,8 +822,7 @@ public:
830
822
}
831
823
832
824
_LIBCPP_HIDE_FROM_ABI __tree_const_iterator& operator --() {
833
- __ptr_ = static_cast <__iter_pointer>(
834
- std::__tree_prev_iter<__node_base_pointer>(static_cast <__end_node_pointer>(__ptr_)));
825
+ __ptr_ = static_cast <__end_node_pointer>(std::__tree_prev_iter<__node_base_pointer>(__ptr_));
835
826
return *this ;
836
827
}
837
828
@@ -906,9 +897,9 @@ public:
906
897
907
898
typedef typename _NodeTypes::__end_node_type __end_node_t ;
908
899
typedef typename _NodeTypes::__end_node_pointer __end_node_ptr;
900
+ using __end_node_pointer _LIBCPP_NODEBUG = typename _NodeTypes::__end_node_pointer;
909
901
910
902
typedef typename _NodeTypes::__parent_pointer __parent_pointer;
911
- typedef typename _NodeTypes::__iter_pointer __iter_pointer;
912
903
913
904
typedef __rebind_alloc<__alloc_traits, __node> __node_allocator;
914
905
typedef allocator_traits<__node_allocator> __node_traits;
@@ -925,24 +916,23 @@ private:
925
916
" Allocator does not rebind pointers in a sane manner." );
926
917
927
918
private:
928
- __iter_pointer __begin_node_;
919
+ __end_node_pointer __begin_node_;
929
920
_LIBCPP_COMPRESSED_PAIR (__end_node_t , __end_node_, __node_allocator, __node_alloc_);
930
921
_LIBCPP_COMPRESSED_PAIR (size_type, __size_, value_compare, __value_comp_);
931
922
932
923
public:
933
- _LIBCPP_HIDE_FROM_ABI __iter_pointer __end_node () _NOEXCEPT {
934
- return static_cast <__iter_pointer>( pointer_traits<__end_node_ptr >::pointer_to (__end_node_) );
924
+ _LIBCPP_HIDE_FROM_ABI __end_node_pointer __end_node () _NOEXCEPT {
925
+ return pointer_traits<__end_node_pointer >::pointer_to (__end_node_);
935
926
}
936
- _LIBCPP_HIDE_FROM_ABI __iter_pointer __end_node () const _NOEXCEPT {
937
- return static_cast <__iter_pointer>(
938
- pointer_traits<__end_node_ptr>::pointer_to (const_cast <__end_node_t &>(__end_node_)));
927
+ _LIBCPP_HIDE_FROM_ABI __end_node_pointer __end_node () const _NOEXCEPT {
928
+ return pointer_traits<__end_node_pointer>::pointer_to (const_cast <__end_node_t &>(__end_node_));
939
929
}
940
930
_LIBCPP_HIDE_FROM_ABI __node_allocator& __node_alloc () _NOEXCEPT { return __node_alloc_; }
941
931
942
932
private:
943
933
_LIBCPP_HIDE_FROM_ABI const __node_allocator& __node_alloc () const _NOEXCEPT { return __node_alloc_; }
944
- _LIBCPP_HIDE_FROM_ABI __iter_pointer & __begin_node () _NOEXCEPT { return __begin_node_; }
945
- _LIBCPP_HIDE_FROM_ABI const __iter_pointer & __begin_node () const _NOEXCEPT { return __begin_node_; }
934
+ _LIBCPP_HIDE_FROM_ABI __end_node_pointer & __begin_node () _NOEXCEPT { return __begin_node_; }
935
+ _LIBCPP_HIDE_FROM_ABI const __end_node_pointer & __begin_node () const _NOEXCEPT { return __begin_node_; }
946
936
947
937
public:
948
938
_LIBCPP_HIDE_FROM_ABI allocator_type __alloc () const _NOEXCEPT { return allocator_type (__node_alloc ()); }
@@ -1189,27 +1179,27 @@ public:
1189
1179
return __lower_bound (__v, __root (), __end_node ());
1190
1180
}
1191
1181
template <class _Key >
1192
- _LIBCPP_HIDE_FROM_ABI iterator __lower_bound (const _Key& __v, __node_pointer __root, __iter_pointer __result);
1182
+ _LIBCPP_HIDE_FROM_ABI iterator __lower_bound (const _Key& __v, __node_pointer __root, __end_node_pointer __result);
1193
1183
template <class _Key >
1194
1184
_LIBCPP_HIDE_FROM_ABI const_iterator lower_bound (const _Key& __v) const {
1195
1185
return __lower_bound (__v, __root (), __end_node ());
1196
1186
}
1197
1187
template <class _Key >
1198
1188
_LIBCPP_HIDE_FROM_ABI const_iterator
1199
- __lower_bound (const _Key& __v, __node_pointer __root, __iter_pointer __result) const ;
1189
+ __lower_bound (const _Key& __v, __node_pointer __root, __end_node_pointer __result) const ;
1200
1190
template <class _Key >
1201
1191
_LIBCPP_HIDE_FROM_ABI iterator upper_bound (const _Key& __v) {
1202
1192
return __upper_bound (__v, __root (), __end_node ());
1203
1193
}
1204
1194
template <class _Key >
1205
- _LIBCPP_HIDE_FROM_ABI iterator __upper_bound (const _Key& __v, __node_pointer __root, __iter_pointer __result);
1195
+ _LIBCPP_HIDE_FROM_ABI iterator __upper_bound (const _Key& __v, __node_pointer __root, __end_node_pointer __result);
1206
1196
template <class _Key >
1207
1197
_LIBCPP_HIDE_FROM_ABI const_iterator upper_bound (const _Key& __v) const {
1208
1198
return __upper_bound (__v, __root (), __end_node ());
1209
1199
}
1210
1200
template <class _Key >
1211
1201
_LIBCPP_HIDE_FROM_ABI const_iterator
1212
- __upper_bound (const _Key& __v, __node_pointer __root, __iter_pointer __result) const ;
1202
+ __upper_bound (const _Key& __v, __node_pointer __root, __end_node_pointer __result) const ;
1213
1203
template <class _Key >
1214
1204
_LIBCPP_HIDE_FROM_ABI pair<iterator, iterator> __equal_range_unique (const _Key& __k);
1215
1205
template <class _Key >
@@ -1323,13 +1313,13 @@ __tree<_Tp, _Compare, _Allocator>::__tree(const value_compare& __comp) _NOEXCEPT
1323
1313
1324
1314
template <class _Tp , class _Compare , class _Allocator >
1325
1315
__tree<_Tp, _Compare, _Allocator>::__tree(const allocator_type& __a)
1326
- : __begin_node_(__iter_pointer() ), __node_alloc_(__node_allocator(__a)), __size_(0 ) {
1316
+ : __begin_node_(), __node_alloc_(__node_allocator(__a)), __size_(0 ) {
1327
1317
__begin_node () = __end_node ();
1328
1318
}
1329
1319
1330
1320
template <class _Tp , class _Compare , class _Allocator >
1331
1321
__tree<_Tp, _Compare, _Allocator>::__tree(const value_compare& __comp, const allocator_type& __a)
1332
- : __begin_node_(__iter_pointer() ), __node_alloc_(__node_allocator(__a)), __size_(0 ), __value_comp_(__comp) {
1322
+ : __begin_node_(), __node_alloc_(__node_allocator(__a)), __size_(0 ), __value_comp_(__comp) {
1333
1323
__begin_node () = __end_node ();
1334
1324
}
1335
1325
@@ -1427,7 +1417,7 @@ void __tree<_Tp, _Compare, _Allocator>::__assign_multi(_InputIterator __first, _
1427
1417
1428
1418
template <class _Tp , class _Compare , class _Allocator >
1429
1419
__tree<_Tp, _Compare, _Allocator>::__tree(const __tree& __t )
1430
- : __begin_node_(__iter_pointer() ),
1420
+ : __begin_node_(),
1431
1421
__node_alloc_ (__node_traits::select_on_container_copy_construction(__t .__node_alloc())),
1432
1422
__size_(0 ),
1433
1423
__value_comp_(__t .value_comp()) {
@@ -1758,7 +1748,7 @@ void __tree<_Tp, _Compare, _Allocator>::__insert_node_at(
1758
1748
// __new_node->__is_black_ is initialized in __tree_balance_after_insert
1759
1749
__child = __new_node;
1760
1750
if (__begin_node ()->__left_ != nullptr )
1761
- __begin_node () = static_cast <__iter_pointer >(__begin_node ()->__left_ );
1751
+ __begin_node () = static_cast <__end_node_pointer >(__begin_node ()->__left_ );
1762
1752
std::__tree_balance_after_insert (__end_node ()->__left_ , __child);
1763
1753
++size ();
1764
1754
}
@@ -2110,17 +2100,17 @@ template <class _Tp, class _Compare, class _Allocator>
2110
2100
template <class _Key >
2111
2101
typename __tree<_Tp, _Compare, _Allocator>::size_type
2112
2102
__tree<_Tp, _Compare, _Allocator>::__count_multi(const _Key& __k) const {
2113
- __iter_pointer __result = __end_node ();
2114
- __node_pointer __rt = __root ();
2103
+ __end_node_pointer __result = __end_node ();
2104
+ __node_pointer __rt = __root ();
2115
2105
while (__rt != nullptr ) {
2116
2106
if (value_comp ()(__k, __rt->__value_ )) {
2117
- __result = static_cast <__iter_pointer >(__rt);
2107
+ __result = static_cast <__end_node_pointer >(__rt);
2118
2108
__rt = static_cast <__node_pointer>(__rt->__left_ );
2119
2109
} else if (value_comp ()(__rt->__value_ , __k))
2120
2110
__rt = static_cast <__node_pointer>(__rt->__right_ );
2121
2111
else
2122
2112
return std::distance (
2123
- __lower_bound (__k, static_cast <__node_pointer>(__rt->__left_ ), static_cast <__iter_pointer >(__rt)),
2113
+ __lower_bound (__k, static_cast <__node_pointer>(__rt->__left_ ), static_cast <__end_node_pointer >(__rt)),
2124
2114
__upper_bound (__k, static_cast <__node_pointer>(__rt->__right_ ), __result));
2125
2115
}
2126
2116
return 0 ;
@@ -2129,10 +2119,10 @@ __tree<_Tp, _Compare, _Allocator>::__count_multi(const _Key& __k) const {
2129
2119
template <class _Tp , class _Compare , class _Allocator >
2130
2120
template <class _Key >
2131
2121
typename __tree<_Tp, _Compare, _Allocator>::iterator
2132
- __tree<_Tp, _Compare, _Allocator>::__lower_bound(const _Key& __v, __node_pointer __root, __iter_pointer __result) {
2122
+ __tree<_Tp, _Compare, _Allocator>::__lower_bound(const _Key& __v, __node_pointer __root, __end_node_pointer __result) {
2133
2123
while (__root != nullptr ) {
2134
2124
if (!value_comp ()(__root->__value_ , __v)) {
2135
- __result = static_cast <__iter_pointer >(__root);
2125
+ __result = static_cast <__end_node_pointer >(__root);
2136
2126
__root = static_cast <__node_pointer>(__root->__left_ );
2137
2127
} else
2138
2128
__root = static_cast <__node_pointer>(__root->__right_ );
@@ -2143,10 +2133,10 @@ __tree<_Tp, _Compare, _Allocator>::__lower_bound(const _Key& __v, __node_pointer
2143
2133
template <class _Tp , class _Compare , class _Allocator >
2144
2134
template <class _Key >
2145
2135
typename __tree<_Tp, _Compare, _Allocator>::const_iterator __tree<_Tp, _Compare, _Allocator>::__lower_bound(
2146
- const _Key& __v, __node_pointer __root, __iter_pointer __result) const {
2136
+ const _Key& __v, __node_pointer __root, __end_node_pointer __result) const {
2147
2137
while (__root != nullptr ) {
2148
2138
if (!value_comp ()(__root->__value_ , __v)) {
2149
- __result = static_cast <__iter_pointer >(__root);
2139
+ __result = static_cast <__end_node_pointer >(__root);
2150
2140
__root = static_cast <__node_pointer>(__root->__left_ );
2151
2141
} else
2152
2142
__root = static_cast <__node_pointer>(__root->__right_ );
@@ -2157,10 +2147,10 @@ typename __tree<_Tp, _Compare, _Allocator>::const_iterator __tree<_Tp, _Compare,
2157
2147
template <class _Tp , class _Compare , class _Allocator >
2158
2148
template <class _Key >
2159
2149
typename __tree<_Tp, _Compare, _Allocator>::iterator
2160
- __tree<_Tp, _Compare, _Allocator>::__upper_bound(const _Key& __v, __node_pointer __root, __iter_pointer __result) {
2150
+ __tree<_Tp, _Compare, _Allocator>::__upper_bound(const _Key& __v, __node_pointer __root, __end_node_pointer __result) {
2161
2151
while (__root != nullptr ) {
2162
2152
if (value_comp ()(__v, __root->__value_ )) {
2163
- __result = static_cast <__iter_pointer >(__root);
2153
+ __result = static_cast <__end_node_pointer >(__root);
2164
2154
__root = static_cast <__node_pointer>(__root->__left_ );
2165
2155
} else
2166
2156
__root = static_cast <__node_pointer>(__root->__right_ );
@@ -2171,10 +2161,10 @@ __tree<_Tp, _Compare, _Allocator>::__upper_bound(const _Key& __v, __node_pointer
2171
2161
template <class _Tp , class _Compare , class _Allocator >
2172
2162
template <class _Key >
2173
2163
typename __tree<_Tp, _Compare, _Allocator>::const_iterator __tree<_Tp, _Compare, _Allocator>::__upper_bound(
2174
- const _Key& __v, __node_pointer __root, __iter_pointer __result) const {
2164
+ const _Key& __v, __node_pointer __root, __end_node_pointer __result) const {
2175
2165
while (__root != nullptr ) {
2176
2166
if (value_comp ()(__v, __root->__value_ )) {
2177
- __result = static_cast <__iter_pointer >(__root);
2167
+ __result = static_cast <__end_node_pointer >(__root);
2178
2168
__root = static_cast <__node_pointer>(__root->__left_ );
2179
2169
} else
2180
2170
__root = static_cast <__node_pointer>(__root->__right_ );
@@ -2187,17 +2177,17 @@ template <class _Key>
2187
2177
pair<typename __tree<_Tp, _Compare, _Allocator>::iterator, typename __tree<_Tp, _Compare, _Allocator>::iterator>
2188
2178
__tree<_Tp, _Compare, _Allocator>::__equal_range_unique(const _Key& __k) {
2189
2179
typedef pair<iterator, iterator> _Pp;
2190
- __iter_pointer __result = __end_node ();
2191
- __node_pointer __rt = __root ();
2180
+ __end_node_pointer __result = __end_node ();
2181
+ __node_pointer __rt = __root ();
2192
2182
while (__rt != nullptr ) {
2193
2183
if (value_comp ()(__k, __rt->__value_ )) {
2194
- __result = static_cast <__iter_pointer >(__rt);
2184
+ __result = static_cast <__end_node_pointer >(__rt);
2195
2185
__rt = static_cast <__node_pointer>(__rt->__left_ );
2196
2186
} else if (value_comp ()(__rt->__value_ , __k))
2197
2187
__rt = static_cast <__node_pointer>(__rt->__right_ );
2198
2188
else
2199
2189
return _Pp (iterator (__rt),
2200
- iterator (__rt->__right_ != nullptr ? static_cast <__iter_pointer >(std::__tree_min (__rt->__right_ ))
2190
+ iterator (__rt->__right_ != nullptr ? static_cast <__end_node_pointer >(std::__tree_min (__rt->__right_ ))
2201
2191
: __result));
2202
2192
}
2203
2193
return _Pp (iterator (__result), iterator (__result));
@@ -2209,19 +2199,19 @@ pair<typename __tree<_Tp, _Compare, _Allocator>::const_iterator,
2209
2199
typename __tree<_Tp, _Compare, _Allocator>::const_iterator>
2210
2200
__tree<_Tp, _Compare, _Allocator>::__equal_range_unique(const _Key& __k) const {
2211
2201
typedef pair<const_iterator, const_iterator> _Pp;
2212
- __iter_pointer __result = __end_node ();
2213
- __node_pointer __rt = __root ();
2202
+ __end_node_pointer __result = __end_node ();
2203
+ __node_pointer __rt = __root ();
2214
2204
while (__rt != nullptr ) {
2215
2205
if (value_comp ()(__k, __rt->__value_ )) {
2216
- __result = static_cast <__iter_pointer >(__rt);
2206
+ __result = static_cast <__end_node_pointer >(__rt);
2217
2207
__rt = static_cast <__node_pointer>(__rt->__left_ );
2218
2208
} else if (value_comp ()(__rt->__value_ , __k))
2219
2209
__rt = static_cast <__node_pointer>(__rt->__right_ );
2220
2210
else
2221
2211
return _Pp (
2222
2212
const_iterator (__rt),
2223
2213
const_iterator (
2224
- __rt->__right_ != nullptr ? static_cast <__iter_pointer >(std::__tree_min (__rt->__right_ )) : __result));
2214
+ __rt->__right_ != nullptr ? static_cast <__end_node_pointer >(std::__tree_min (__rt->__right_ )) : __result));
2225
2215
}
2226
2216
return _Pp (const_iterator (__result), const_iterator (__result));
2227
2217
}
@@ -2231,16 +2221,16 @@ template <class _Key>
2231
2221
pair<typename __tree<_Tp, _Compare, _Allocator>::iterator, typename __tree<_Tp, _Compare, _Allocator>::iterator>
2232
2222
__tree<_Tp, _Compare, _Allocator>::__equal_range_multi(const _Key& __k) {
2233
2223
typedef pair<iterator, iterator> _Pp;
2234
- __iter_pointer __result = __end_node ();
2224
+ __end_node_pointer __result = __end_node ();
2235
2225
__node_pointer __rt = __root ();
2236
2226
while (__rt != nullptr ) {
2237
2227
if (value_comp ()(__k, __rt->__value_ )) {
2238
- __result = static_cast <__iter_pointer >(__rt);
2228
+ __result = static_cast <__end_node_pointer >(__rt);
2239
2229
__rt = static_cast <__node_pointer>(__rt->__left_ );
2240
2230
} else if (value_comp ()(__rt->__value_ , __k))
2241
2231
__rt = static_cast <__node_pointer>(__rt->__right_ );
2242
2232
else
2243
- return _Pp (__lower_bound (__k, static_cast <__node_pointer>(__rt->__left_ ), static_cast <__iter_pointer >(__rt)),
2233
+ return _Pp (__lower_bound (__k, static_cast <__node_pointer>(__rt->__left_ ), static_cast <__end_node_pointer >(__rt)),
2244
2234
__upper_bound (__k, static_cast <__node_pointer>(__rt->__right_ ), __result));
2245
2235
}
2246
2236
return _Pp (iterator (__result), iterator (__result));
@@ -2252,16 +2242,16 @@ pair<typename __tree<_Tp, _Compare, _Allocator>::const_iterator,
2252
2242
typename __tree<_Tp, _Compare, _Allocator>::const_iterator>
2253
2243
__tree<_Tp, _Compare, _Allocator>::__equal_range_multi(const _Key& __k) const {
2254
2244
typedef pair<const_iterator, const_iterator> _Pp;
2255
- __iter_pointer __result = __end_node ();
2245
+ __end_node_pointer __result = __end_node ();
2256
2246
__node_pointer __rt = __root ();
2257
2247
while (__rt != nullptr ) {
2258
2248
if (value_comp ()(__k, __rt->__value_ )) {
2259
- __result = static_cast <__iter_pointer >(__rt);
2249
+ __result = static_cast <__end_node_pointer >(__rt);
2260
2250
__rt = static_cast <__node_pointer>(__rt->__left_ );
2261
2251
} else if (value_comp ()(__rt->__value_ , __k))
2262
2252
__rt = static_cast <__node_pointer>(__rt->__right_ );
2263
2253
else
2264
- return _Pp (__lower_bound (__k, static_cast <__node_pointer>(__rt->__left_ ), static_cast <__iter_pointer >(__rt)),
2254
+ return _Pp (__lower_bound (__k, static_cast <__node_pointer>(__rt->__left_ ), static_cast <__end_node_pointer >(__rt)),
2265
2255
__upper_bound (__k, static_cast <__node_pointer>(__rt->__right_ ), __result));
2266
2256
}
2267
2257
return _Pp (const_iterator (__result), const_iterator (__result));
@@ -2273,9 +2263,9 @@ __tree<_Tp, _Compare, _Allocator>::remove(const_iterator __p) _NOEXCEPT {
2273
2263
__node_pointer __np = __p.__get_np ();
2274
2264
if (__begin_node () == __p.__ptr_ ) {
2275
2265
if (__np->__right_ != nullptr )
2276
- __begin_node () = static_cast <__iter_pointer >(__np->__right_ );
2266
+ __begin_node () = static_cast <__end_node_pointer >(__np->__right_ );
2277
2267
else
2278
- __begin_node () = static_cast <__iter_pointer >(__np->__parent_ );
2268
+ __begin_node () = static_cast <__end_node_pointer >(__np->__parent_ );
2279
2269
}
2280
2270
--size ();
2281
2271
std::__tree_remove (__end_node ()->__left_ , static_cast <__node_base_pointer>(__np));
0 commit comments