@@ -209,7 +209,7 @@ inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX26 _EndNodePtr __tree_ne
209209 return std::__static_fancy_pointer_cast<_EndNodePtr>(std::__tree_min (__x->__right_ ));
210210 while (!std::__tree_is_left_child (__x))
211211 __x = __x->__parent_unsafe ();
212- return static_cast <_EndNodePtr>(__x->__parent_ );
212+ return std::__static_fancy_pointer_cast <_EndNodePtr>(__x->__parent_ );
213213}
214214
215215// Returns: pointer to the previous in-order node before __x.
@@ -1118,25 +1118,27 @@ public:
11181118 return ;
11191119
11201120 if (__root () == nullptr ) { // Make sure we always have a root node
1121- __insert_node_at (
1122- __end_node (), __end_node ()->__left_ , static_cast <__node_base_pointer>(__construct_node (*__first).release ()));
1121+ __insert_node_at (__end_node (),
1122+ __end_node ()->__left_ ,
1123+ std::__static_fancy_pointer_cast<__node_base_pointer>(__construct_node (*__first).release ()));
11231124 ++__first;
11241125 }
11251126
1126- auto __max_node = static_cast <__node_pointer>(std::__tree_max (static_cast <__node_base_pointer>(__root ())));
1127+ auto __max_node = std::__static_fancy_pointer_cast<__node_pointer>(
1128+ std::__tree_max (std::__static_fancy_pointer_cast<__node_base_pointer>(__root ())));
11271129
11281130 for (; __first != __last; ++__first) {
11291131 __node_holder __nd = __construct_node (*__first);
11301132 // Always check the max node first. This optimizes for sorted ranges inserted at the end.
11311133 if (!value_comp ()(__nd->__get_value (), __max_node->__get_value ())) { // __node >= __max_val
1132- __insert_node_at (static_cast <__end_node_pointer>(__max_node),
1134+ __insert_node_at (std::__static_fancy_pointer_cast <__end_node_pointer>(__max_node),
11331135 __max_node->__right_ ,
1134- static_cast <__node_base_pointer>(__nd.get ()));
1136+ std::__static_fancy_pointer_cast <__node_base_pointer>(__nd.get ()));
11351137 __max_node = __nd.release ();
11361138 } else {
11371139 __end_node_pointer __parent;
11381140 __node_base_pointer& __child = __find_leaf_high (__parent, __nd->__get_value ());
1139- __insert_node_at (__parent, __child, static_cast <__node_base_pointer>(__nd.release ()));
1141+ __insert_node_at (__parent, __child, std::__static_fancy_pointer_cast <__node_base_pointer>(__nd.release ()));
11401142 }
11411143 }
11421144 }
@@ -1501,7 +1503,7 @@ private:
15011503 __t_->destroy (__cache_elem_);
15021504 if (__cache_root_) {
15031505 while (__cache_root_->__parent_ != nullptr )
1504- __cache_root_ = static_cast <__node_pointer>(__cache_root_->__parent_ );
1506+ __cache_root_ = std::__static_fancy_pointer_cast <__node_pointer>(__cache_root_->__parent_ );
15051507 __t_->destroy (__cache_root_);
15061508 }
15071509 }
@@ -1647,14 +1649,14 @@ __tree<_Tp, _Compare, _Allocator>::_DetachedTreeCache::__detach_next(__node_poin
16471649 __cache = std::__static_fancy_pointer_cast<__node_pointer>(__cache->__parent_ );
16481650 if (__cache->__right_ == nullptr )
16491651 return __cache;
1650- return static_cast <__node_pointer>(std::__tree_leaf (__cache->__right_ ));
1652+ return std::__static_fancy_pointer_cast <__node_pointer>(std::__tree_leaf (__cache->__right_ ));
16511653 }
16521654 // __cache is right child
16531655 __cache->__parent_unsafe ()->__right_ = nullptr ;
16541656 __cache = std::__static_fancy_pointer_cast<__node_pointer>(__cache->__parent_ );
16551657 if (__cache->__left_ == nullptr )
16561658 return __cache;
1657- return static_cast <__node_pointer>(std::__tree_leaf (__cache->__left_ ));
1659+ return std::__static_fancy_pointer_cast <__node_pointer>(std::__tree_leaf (__cache->__left_ ));
16581660}
16591661
16601662template <class _Tp , class _Compare , class _Allocator >
@@ -1749,7 +1751,7 @@ _LIBCPP_CONSTEXPR_SINCE_CXX26 __tree<_Tp, _Compare, _Allocator>::__tree(__tree&&
17491751 if (__size_ == 0 )
17501752 __begin_node_ = __end_node ();
17511753 else {
1752- __end_node ()->__left_ ->__parent_ = static_cast <__end_node_pointer>(__end_node ());
1754+ __end_node ()->__left_ ->__parent_ = std::__static_fancy_pointer_cast <__end_node_pointer>(__end_node ());
17531755 __t .__begin_node_ = __t .__end_node ();
17541756 __t .__end_node ()->__left_ = nullptr ;
17551757 __t .__size_ = 0 ;
@@ -1765,7 +1767,7 @@ _LIBCPP_CONSTEXPR_SINCE_CXX26 __tree<_Tp, _Compare, _Allocator>::__tree(__tree&&
17651767 else {
17661768 __begin_node_ = __t .__begin_node_ ;
17671769 __end_node ()->__left_ = __t .__end_node ()->__left_ ;
1768- __end_node ()->__left_ ->__parent_ = static_cast <__end_node_pointer>(__end_node ());
1770+ __end_node ()->__left_ ->__parent_ = std::__static_fancy_pointer_cast <__end_node_pointer>(__end_node ());
17691771 __size_ = __t .__size_ ;
17701772 __t .__begin_node_ = __t .__end_node ();
17711773 __t .__end_node ()->__left_ = nullptr ;
@@ -1779,7 +1781,7 @@ _LIBCPP_CONSTEXPR_SINCE_CXX26 __tree<_Tp, _Compare, _Allocator>::__tree(__tree&&
17791781template <class _Tp , class _Compare , class _Allocator >
17801782_LIBCPP_CONSTEXPR_SINCE_CXX26 void __tree<_Tp, _Compare, _Allocator>::__move_assign(__tree& __t , true_type)
17811783 _NOEXCEPT_ (is_nothrow_move_assignable<value_compare>::value&& is_nothrow_move_assignable<__node_allocator>::value) {
1782- destroy (static_cast <__node_pointer>(__end_node ()->__left_ ));
1784+ destroy (std::__static_fancy_pointer_cast <__node_pointer>(__end_node ()->__left_ ));
17831785 __begin_node_ = __t .__begin_node_ ;
17841786 __end_node_ = __t .__end_node_ ;
17851787 __move_assign_alloc (__t );
@@ -1788,7 +1790,7 @@ _LIBCPP_CONSTEXPR_SINCE_CXX26 void __tree<_Tp, _Compare, _Allocator>::__move_ass
17881790 if (__size_ == 0 )
17891791 __begin_node_ = __end_node ();
17901792 else {
1791- __end_node ()->__left_ ->__parent_ = static_cast <__end_node_pointer>(__end_node ());
1793+ __end_node ()->__left_ ->__parent_ = std::__static_fancy_pointer_cast <__end_node_pointer>(__end_node ());
17921794 __t .__begin_node_ = __t .__end_node ();
17931795 __t .__end_node ()->__left_ = nullptr ;
17941796 __t .__size_ = 0 ;
@@ -1860,16 +1862,16 @@ __tree<_Tp, _Compare, _Allocator>::__find_leaf_low(__end_node_pointer& __parent,
18601862 while (true ) {
18611863 if (value_comp ()(__nd->__get_value (), __v)) {
18621864 if (__nd->__right_ != nullptr )
1863- __nd = static_cast <__node_pointer>(__nd->__right_ );
1865+ __nd = std::__static_fancy_pointer_cast <__node_pointer>(__nd->__right_ );
18641866 else {
1865- __parent = static_cast <__end_node_pointer>(__nd);
1867+ __parent = std::__static_fancy_pointer_cast <__end_node_pointer>(__nd);
18661868 return __nd->__right_ ;
18671869 }
18681870 } else {
18691871 if (__nd->__left_ != nullptr )
1870- __nd = static_cast <__node_pointer>(__nd->__left_ );
1872+ __nd = std::__static_fancy_pointer_cast <__node_pointer>(__nd->__left_ );
18711873 else {
1872- __parent = static_cast <__end_node_pointer>(__nd);
1874+ __parent = std::__static_fancy_pointer_cast <__end_node_pointer>(__nd);
18731875 return __parent->__left_ ;
18741876 }
18751877 }
@@ -1890,14 +1892,14 @@ __tree<_Tp, _Compare, _Allocator>::__find_leaf_high(__end_node_pointer& __parent
18901892 while (true ) {
18911893 if (value_comp ()(__v, __nd->__get_value ())) {
18921894 if (__nd->__left_ != nullptr )
1893- __nd = static_cast <__node_pointer>(__nd->__left_ );
1895+ __nd = std::__static_fancy_pointer_cast <__node_pointer>(__nd->__left_ );
18941896 else {
1895- __parent = static_cast <__end_node_pointer>(__nd);
1897+ __parent = std::__static_fancy_pointer_cast <__end_node_pointer>(__nd);
18961898 return __parent->__left_ ;
18971899 }
18981900 } else {
18991901 if (__nd->__right_ != nullptr )
1900- __nd = static_cast <__node_pointer>(__nd->__right_ );
1902+ __nd = std::__static_fancy_pointer_cast <__node_pointer>(__nd->__right_ );
19011903 else {
19021904 __parent = std::__static_fancy_pointer_cast<__end_node_pointer>(__nd);
19031905 return __nd->__right_ ;
@@ -1926,10 +1928,10 @@ __tree<_Tp, _Compare, _Allocator>::__find_leaf(
19261928 if (__prior == begin () || !value_comp ()(__v, *--__prior)) {
19271929 // *prev(__hint) <= __v <= *__hint
19281930 if (__hint.__ptr_ ->__left_ == nullptr ) {
1929- __parent = static_cast <__end_node_pointer>(__hint.__ptr_ );
1931+ __parent = std::__static_fancy_pointer_cast <__end_node_pointer>(__hint.__ptr_ );
19301932 return __parent->__left_ ;
19311933 } else {
1932- __parent = static_cast <__end_node_pointer>(__prior.__ptr_ );
1934+ __parent = std::__static_fancy_pointer_cast <__end_node_pointer>(__prior.__ptr_ );
19331935 return std::__static_fancy_pointer_cast<__node_base_pointer>(__prior.__ptr_ )->__right_ ;
19341936 }
19351937 }
@@ -2016,15 +2018,15 @@ __tree<_Tp, _Compare, _Allocator>::__find_equal(const_iterator __hint, __node_ba
20162018 if (__next == end () || value_comp ()(__v, *__next)) {
20172019 // *__hint < __v < *std::next(__hint)
20182020 if (__hint.__get_np ()->__right_ == nullptr )
2019- return _Pair (__hint.__ptr_ , static_cast <__node_pointer>(__hint.__ptr_ )->__right_ );
2021+ return _Pair (__hint.__ptr_ , std::__static_fancy_pointer_cast <__node_pointer>(__hint.__ptr_ )->__right_ );
20202022 return _Pair (__next.__ptr_ , __next.__ptr_ ->__left_ );
20212023 }
20222024 // *next(__hint) <= __v
20232025 return __find_equal (__v);
20242026 }
20252027
20262028 // else __v == *__hint
2027- __dummy = static_cast <__node_base_pointer>(__hint.__ptr_ );
2029+ __dummy = std::__static_fancy_pointer_cast <__node_base_pointer>(__hint.__ptr_ );
20282030 return _Pair (__hint.__ptr_ , __dummy);
20292031}
20302032
@@ -2060,8 +2062,8 @@ __tree<_Tp, _Compare, _Allocator>::__emplace_multi(_Args&&... __args) {
20602062 __node_holder __h = __construct_node (std::forward<_Args>(__args)...);
20612063 __end_node_pointer __parent;
20622064 __node_base_pointer& __child = __find_leaf_high (__parent, __h->__get_value ());
2063- __insert_node_at (__parent, __child, static_cast <__node_base_pointer>(__h.get ()));
2064- return iterator (static_cast <__node_pointer>(__h.release ()));
2065+ __insert_node_at (__parent, __child, std::__static_fancy_pointer_cast <__node_base_pointer>(__h.get ()));
2066+ return iterator (std::__static_fancy_pointer_cast <__node_pointer>(__h.release ()));
20652067}
20662068
20672069template <class _Tp , class _Compare , class _Allocator >
@@ -2072,14 +2074,14 @@ __tree<_Tp, _Compare, _Allocator>::__emplace_hint_multi(const_iterator __p, _Arg
20722074 __end_node_pointer __parent;
20732075 __node_base_pointer& __child = __find_leaf (__p, __parent, __h->__get_value ());
20742076 __insert_node_at (__parent, __child, std::__static_fancy_pointer_cast<__node_base_pointer>(__h.get ()));
2075- return iterator (static_cast <__node_pointer>(__h.release ()));
2077+ return iterator (std::__static_fancy_pointer_cast <__node_pointer>(__h.release ()));
20762078}
20772079
20782080template <class _Tp , class _Compare , class _Allocator >
20792081pair<typename __tree<_Tp, _Compare, _Allocator>::iterator, bool > _LIBCPP_CONSTEXPR_SINCE_CXX26
20802082__tree<_Tp, _Compare, _Allocator>::__node_assign_unique(const value_type& __v, __node_pointer __nd) {
20812083 auto [__parent, __child] = __find_equal (__v);
2082- __node_pointer __r = static_cast <__node_pointer>(__child);
2084+ __node_pointer __r = std::__static_fancy_pointer_cast <__node_pointer>(__child);
20832085 bool __inserted = false ;
20842086 if (__child == nullptr ) {
20852087 __assign_value (__nd->__get_value (), __v);
@@ -2104,7 +2106,7 @@ _LIBCPP_CONSTEXPR_SINCE_CXX26 typename __tree<_Tp, _Compare, _Allocator>::iterat
21042106__tree<_Tp, _Compare, _Allocator>::__node_insert_multi(const_iterator __p, __node_pointer __nd) {
21052107 __end_node_pointer __parent;
21062108 __node_base_pointer& __child = __find_leaf (__p, __parent, __nd->__get_value ());
2107- __insert_node_at (__parent, __child, static_cast <__node_base_pointer>(__nd));
2109+ __insert_node_at (__parent, __child, std::__static_fancy_pointer_cast <__node_base_pointer>(__nd));
21082110 return iterator (__nd);
21092111}
21102112
@@ -2149,7 +2151,7 @@ __tree<_Tp, _Compare, _Allocator>::__node_handle_insert_unique(const_iterator __
21492151 __node_pointer __ptr = __nh.__ptr_ ;
21502152 __node_base_pointer __dummy;
21512153 auto [__parent, __child] = __find_equal (__hint, __dummy, __ptr->__get_value ());
2152- __node_pointer __r = static_cast <__node_pointer>(__child);
2154+ __node_pointer __r = std::__static_fancy_pointer_cast <__node_pointer>(__child);
21532155 if (__child == nullptr ) {
21542156 __insert_node_at (__parent, __child, std::__static_fancy_pointer_cast<__node_base_pointer>(__ptr));
21552157 __r = __ptr;
@@ -2188,7 +2190,7 @@ __tree<_Tp, _Compare, _Allocator>::__node_handle_merge_unique(__tree<_Tp, _Comp2
21882190 if (__child != nullptr )
21892191 continue ;
21902192 __source.__remove_node_pointer (__src_ptr);
2191- __insert_node_at (__parent, __child, static_cast <__node_base_pointer>(__src_ptr));
2193+ __insert_node_at (__parent, __child, std::__static_fancy_pointer_cast <__node_base_pointer>(__src_ptr));
21922194 }
21932195}
21942196
@@ -2201,7 +2203,7 @@ __tree<_Tp, _Compare, _Allocator>::__node_handle_insert_multi(_NodeHandle&& __nh
22012203 __node_pointer __ptr = __nh.__ptr_ ;
22022204 __end_node_pointer __parent;
22032205 __node_base_pointer& __child = __find_leaf_high (__parent, __ptr->__get_value ());
2204- __insert_node_at (__parent, __child, static_cast <__node_base_pointer>(__ptr));
2206+ __insert_node_at (__parent, __child, std::__static_fancy_pointer_cast <__node_base_pointer>(__ptr));
22052207 __nh.__release_ptr ();
22062208 return iterator (__ptr);
22072209}
@@ -2216,7 +2218,7 @@ __tree<_Tp, _Compare, _Allocator>::__node_handle_insert_multi(const_iterator __h
22162218 __node_pointer __ptr = __nh.__ptr_ ;
22172219 __end_node_pointer __parent;
22182220 __node_base_pointer& __child = __find_leaf (__hint, __parent, __ptr->__get_value ());
2219- __insert_node_at (__parent, __child, static_cast <__node_base_pointer>(__ptr));
2221+ __insert_node_at (__parent, __child, std::__static_fancy_pointer_cast <__node_base_pointer>(__ptr));
22202222 __nh.__release_ptr ();
22212223 return iterator (__ptr);
22222224}
@@ -2231,7 +2233,7 @@ __tree<_Tp, _Compare, _Allocator>::__node_handle_merge_multi(__tree<_Tp, _Comp2,
22312233 __node_base_pointer& __child = __find_leaf_high (__parent, __src_ptr->__get_value ());
22322234 ++__i;
22332235 __source.__remove_node_pointer (__src_ptr);
2234- __insert_node_at (__parent, __child, static_cast <__node_base_pointer>(__src_ptr));
2236+ __insert_node_at (__parent, __child, std::__static_fancy_pointer_cast <__node_base_pointer>(__src_ptr));
22352237 }
22362238}
22372239
@@ -2306,14 +2308,16 @@ __tree<_Tp, _Compare, _Allocator>::__count_multi(const _Key& __k) const {
23062308 while (__rt != nullptr ) {
23072309 auto __comp_res = __comp (__k, __rt->__get_value ());
23082310 if (__comp_res.__less ()) {
2309- __result = static_cast <__end_node_pointer>(__rt);
2310- __rt = static_cast <__node_pointer>(__rt->__left_ );
2311+ __result = std::__static_fancy_pointer_cast <__end_node_pointer>(__rt);
2312+ __rt = std::__static_fancy_pointer_cast <__node_pointer>(__rt->__left_ );
23112313 } else if (__comp_res.__greater ())
2312- __rt = static_cast <__node_pointer>(__rt->__right_ );
2314+ __rt = std::__static_fancy_pointer_cast <__node_pointer>(__rt->__right_ );
23132315 else
23142316 return std::distance (
2315- __lower_bound_multi (__k, static_cast <__node_pointer>(__rt->__left_ ), static_cast <__end_node_pointer>(__rt)),
2316- __upper_bound_multi (__k, static_cast <__node_pointer>(__rt->__right_ ), __result));
2317+ __lower_bound_multi (__k,
2318+ std::__static_fancy_pointer_cast<__node_pointer>(__rt->__left_ ),
2319+ std::__static_fancy_pointer_cast<__end_node_pointer>(__rt)),
2320+ __upper_bound_multi (__k, std::__static_fancy_pointer_cast<__node_pointer>(__rt->__right_ ), __result));
23172321 }
23182322 return 0 ;
23192323}
@@ -2441,14 +2445,15 @@ _LIBCPP_CONSTEXPR_SINCE_CXX26
24412445 while (__rt != nullptr ) {
24422446 auto __comp_res = __comp (__k, __rt->__get_value ());
24432447 if (__comp_res.__less ()) {
2444- __result = static_cast <__end_node_pointer>(__rt);
2445- __rt = static_cast <__node_pointer>(__rt->__left_ );
2448+ __result = std::__static_fancy_pointer_cast <__end_node_pointer>(__rt);
2449+ __rt = std::__static_fancy_pointer_cast <__node_pointer>(__rt->__left_ );
24462450 } else if (__comp_res.__greater ())
2447- __rt = static_cast <__node_pointer>(__rt->__right_ );
2451+ __rt = std::__static_fancy_pointer_cast <__node_pointer>(__rt->__right_ );
24482452 else
2449- return _Pp (
2450- __lower_bound_multi (__k, static_cast <__node_pointer>(__rt->__left_ ), static_cast <__end_node_pointer>(__rt)),
2451- __upper_bound_multi (__k, static_cast <__node_pointer>(__rt->__right_ ), __result));
2453+ return _Pp (__lower_bound_multi (__k,
2454+ std::__static_fancy_pointer_cast<__node_pointer>(__rt->__left_ ),
2455+ std::__static_fancy_pointer_cast<__end_node_pointer>(__rt)),
2456+ __upper_bound_multi (__k, std::__static_fancy_pointer_cast<__node_pointer>(__rt->__right_ ), __result));
24522457 }
24532458 return _Pp (iterator (__result), iterator (__result));
24542459}
@@ -2465,14 +2470,15 @@ __tree<_Tp, _Compare, _Allocator>::__equal_range_multi(const _Key& __k) const {
24652470 while (__rt != nullptr ) {
24662471 auto __comp_res = __comp (__k, __rt->__get_value ());
24672472 if (__comp_res.__less ()) {
2468- __result = static_cast <__end_node_pointer>(__rt);
2469- __rt = static_cast <__node_pointer>(__rt->__left_ );
2473+ __result = std::__static_fancy_pointer_cast <__end_node_pointer>(__rt);
2474+ __rt = std::__static_fancy_pointer_cast <__node_pointer>(__rt->__left_ );
24702475 } else if (__comp_res.__greater ())
2471- __rt = static_cast <__node_pointer>(__rt->__right_ );
2476+ __rt = std::__static_fancy_pointer_cast <__node_pointer>(__rt->__right_ );
24722477 else
2473- return _Pp (
2474- __lower_bound_multi (__k, static_cast <__node_pointer>(__rt->__left_ ), static_cast <__end_node_pointer>(__rt)),
2475- __upper_bound_multi (__k, static_cast <__node_pointer>(__rt->__right_ ), __result));
2478+ return _Pp (__lower_bound_multi (__k,
2479+ std::__static_fancy_pointer_cast<__node_pointer>(__rt->__left_ ),
2480+ std::__static_fancy_pointer_cast<__end_node_pointer>(__rt)),
2481+ __upper_bound_multi (__k, std::__static_fancy_pointer_cast<__node_pointer>(__rt->__right_ ), __result));
24762482 }
24772483 return _Pp (const_iterator (__result), const_iterator (__result));
24782484}
@@ -2483,12 +2489,12 @@ __tree<_Tp, _Compare, _Allocator>::remove(const_iterator __p) _NOEXCEPT {
24832489 __node_pointer __np = __p.__get_np ();
24842490 if (__begin_node_ == __p.__ptr_ ) {
24852491 if (__np->__right_ != nullptr )
2486- __begin_node_ = static_cast <__end_node_pointer>(__np->__right_ );
2492+ __begin_node_ = std::__static_fancy_pointer_cast <__end_node_pointer>(__np->__right_ );
24872493 else
2488- __begin_node_ = static_cast <__end_node_pointer>(__np->__parent_ );
2494+ __begin_node_ = std::__static_fancy_pointer_cast <__end_node_pointer>(__np->__parent_ );
24892495 }
24902496 --__size_;
2491- std::__tree_remove (__end_node ()->__left_ , static_cast <__node_base_pointer>(__np));
2497+ std::__tree_remove (__end_node ()->__left_ , std::__static_fancy_pointer_cast <__node_base_pointer>(__np));
24922498 return __node_holder (__np, _Dp (__node_alloc (), true ));
24932499}
24942500
0 commit comments