@@ -294,10 +294,6 @@ struct __forward_node_traits {
294
294
"is being broken between LLVM 19 and LLVM 20. If you don't care about your ABI being broken, define "
295
295
"the _LIBCPP_ABI_FORWARD_LIST_REMOVE_NODE_POINTER_UB macro to silence this diagnostic.");
296
296
# endif
297
-
298
- _LIBCPP_HIDE_FROM_ABI static __begin_node_pointer __as_iter_node (__node_pointer __p) {
299
- return static_cast <__begin_node_pointer>(__p);
300
- }
301
297
};
302
298
303
299
template <class _NodePtr >
@@ -309,10 +305,6 @@ struct __forward_begin_node {
309
305
310
306
_LIBCPP_HIDE_FROM_ABI __forward_begin_node () : __next_(nullptr ) {}
311
307
_LIBCPP_HIDE_FROM_ABI explicit __forward_begin_node (pointer __n) : __next_(__n) {}
312
-
313
- _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __next_as_begin () const {
314
- return static_cast <__begin_node_pointer>(__next_);
315
- }
316
308
};
317
309
318
310
template <class _Tp , class _VoidPtr >
@@ -363,15 +355,12 @@ class _LIBCPP_TEMPLATE_VIS __forward_list_iterator {
363
355
364
356
__begin_node_pointer __ptr_;
365
357
366
- _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __get_begin () const { return __ptr_; }
367
- _LIBCPP_HIDE_FROM_ABI __node_pointer __get_unsafe_node_pointer () const { return static_cast <__node_pointer>(__ptr_); }
368
-
369
358
_LIBCPP_HIDE_FROM_ABI explicit __forward_list_iterator (nullptr_t ) _NOEXCEPT : __ptr_(nullptr ) {}
370
359
371
360
_LIBCPP_HIDE_FROM_ABI explicit __forward_list_iterator (__begin_node_pointer __p) _NOEXCEPT : __ptr_(__p) {}
372
361
373
362
_LIBCPP_HIDE_FROM_ABI explicit __forward_list_iterator (__node_pointer __p) _NOEXCEPT
374
- : __ptr_(__traits::__as_iter_node (__p)) {}
363
+ : __ptr_(static_cast <__begin_node_pointer> (__p)) {}
375
364
376
365
template <class , class >
377
366
friend class _LIBCPP_TEMPLATE_VIS forward_list;
@@ -387,13 +376,13 @@ public:
387
376
388
377
_LIBCPP_HIDE_FROM_ABI __forward_list_iterator () _NOEXCEPT : __ptr_(nullptr ) {}
389
378
390
- _LIBCPP_HIDE_FROM_ABI reference operator *() const { return __get_unsafe_node_pointer ( )->__get_value (); }
379
+ _LIBCPP_HIDE_FROM_ABI reference operator *() const { return static_cast <__node_pointer>(__ptr_ )->__get_value (); }
391
380
_LIBCPP_HIDE_FROM_ABI pointer operator ->() const {
392
- return pointer_traits<pointer>::pointer_to (__get_unsafe_node_pointer ( )->__get_value ());
381
+ return pointer_traits<pointer>::pointer_to (static_cast <__node_pointer>(__ptr_ )->__get_value ());
393
382
}
394
383
395
384
_LIBCPP_HIDE_FROM_ABI __forward_list_iterator& operator ++() {
396
- __ptr_ = __traits::__as_iter_node (__ptr_->__next_ );
385
+ __ptr_ = static_cast <__begin_node_pointer> (__ptr_->__next_ );
397
386
return *this ;
398
387
}
399
388
_LIBCPP_HIDE_FROM_ABI __forward_list_iterator operator ++(int ) {
@@ -423,15 +412,12 @@ class _LIBCPP_TEMPLATE_VIS __forward_list_const_iterator {
423
412
424
413
__begin_node_pointer __ptr_;
425
414
426
- _LIBCPP_HIDE_FROM_ABI __begin_node_pointer __get_begin () const { return __ptr_; }
427
- _LIBCPP_HIDE_FROM_ABI __node_pointer __get_unsafe_node_pointer () const { return static_cast <__node_pointer>(__ptr_); }
428
-
429
415
_LIBCPP_HIDE_FROM_ABI explicit __forward_list_const_iterator (nullptr_t ) _NOEXCEPT : __ptr_(nullptr ) {}
430
416
431
417
_LIBCPP_HIDE_FROM_ABI explicit __forward_list_const_iterator (__begin_node_pointer __p) _NOEXCEPT : __ptr_(__p) {}
432
418
433
419
_LIBCPP_HIDE_FROM_ABI explicit __forward_list_const_iterator (__node_pointer __p) _NOEXCEPT
434
- : __ptr_(__traits::__as_iter_node (__p)) {}
420
+ : __ptr_(static_cast <__begin_node_pointer> (__p)) {}
435
421
436
422
template <class , class >
437
423
friend class forward_list ;
@@ -447,13 +433,13 @@ public:
447
433
_LIBCPP_HIDE_FROM_ABI __forward_list_const_iterator (__forward_list_iterator<__node_pointer> __p) _NOEXCEPT
448
434
: __ptr_(__p.__ptr_) {}
449
435
450
- _LIBCPP_HIDE_FROM_ABI reference operator *() const { return __get_unsafe_node_pointer ( )->__get_value (); }
436
+ _LIBCPP_HIDE_FROM_ABI reference operator *() const { return static_cast <__node_pointer>(__ptr_ )->__get_value (); }
451
437
_LIBCPP_HIDE_FROM_ABI pointer operator ->() const {
452
- return pointer_traits<pointer>::pointer_to (__get_unsafe_node_pointer ( )->__get_value ());
438
+ return pointer_traits<pointer>::pointer_to (static_cast <__node_pointer>(__ptr_ )->__get_value ());
453
439
}
454
440
455
441
_LIBCPP_HIDE_FROM_ABI __forward_list_const_iterator& operator ++() {
456
- __ptr_ = __traits::__as_iter_node (__ptr_->__next_ );
442
+ __ptr_ = static_cast <__begin_node_pointer> (__ptr_->__next_ );
457
443
return *this ;
458
444
}
459
445
_LIBCPP_HIDE_FROM_ABI __forward_list_const_iterator operator ++(int ) {
@@ -903,7 +889,8 @@ inline forward_list<_Tp, _Alloc>::forward_list(const allocator_type& __a) : __ba
903
889
template <class _Tp , class _Alloc >
904
890
forward_list<_Tp, _Alloc>::forward_list(size_type __n) {
905
891
if (__n > 0 ) {
906
- for (__begin_node_pointer __p = __base::__before_begin (); __n > 0 ; --__n, __p = __p->__next_as_begin ()) {
892
+ for (__begin_node_pointer __p = __base::__before_begin (); __n > 0 ;
893
+ --__n, __p = static_cast <__begin_node_pointer>(__p->__next_ )) {
907
894
__p->__next_ = this ->__create_node (/* next = */ nullptr );
908
895
}
909
896
}
@@ -913,7 +900,8 @@ forward_list<_Tp, _Alloc>::forward_list(size_type __n) {
913
900
template <class _Tp , class _Alloc >
914
901
forward_list<_Tp, _Alloc>::forward_list(size_type __n, const allocator_type& __base_alloc) : __base(__base_alloc) {
915
902
if (__n > 0 ) {
916
- for (__begin_node_pointer __p = __base::__before_begin (); __n > 0 ; --__n, __p = __p->__next_as_begin ()) {
903
+ for (__begin_node_pointer __p = __base::__before_begin (); __n > 0 ;
904
+ --__n, __p = static_cast <__begin_node_pointer>(__p->__next_ )) {
917
905
__p->__next_ = this ->__create_node (/* next = */ nullptr );
918
906
}
919
907
}
@@ -1097,15 +1085,15 @@ template <class _Tp, class _Alloc>
1097
1085
template <class ... _Args>
1098
1086
typename forward_list<_Tp, _Alloc>::iterator
1099
1087
forward_list<_Tp, _Alloc>::emplace_after(const_iterator __p, _Args&&... __args) {
1100
- __begin_node_pointer const __r = __p.__get_begin () ;
1088
+ __begin_node_pointer const __r = __p.__ptr_ ;
1101
1089
__r->__next_ = this ->__create_node (/* next = */ __r->__next_ , std::forward<_Args>(__args)...);
1102
1090
return iterator (__r->__next_ );
1103
1091
}
1104
1092
1105
1093
template <class _Tp , class _Alloc >
1106
1094
typename forward_list<_Tp, _Alloc>::iterator
1107
1095
forward_list<_Tp, _Alloc>::insert_after(const_iterator __p, value_type&& __v) {
1108
- __begin_node_pointer const __r = __p.__get_begin () ;
1096
+ __begin_node_pointer const __r = __p.__ptr_ ;
1109
1097
__r->__next_ = this ->__create_node (/* next = */ __r->__next_ , std::move (__v));
1110
1098
return iterator (__r->__next_ );
1111
1099
}
@@ -1115,15 +1103,15 @@ forward_list<_Tp, _Alloc>::insert_after(const_iterator __p, value_type&& __v) {
1115
1103
template <class _Tp , class _Alloc >
1116
1104
typename forward_list<_Tp, _Alloc>::iterator
1117
1105
forward_list<_Tp, _Alloc>::insert_after(const_iterator __p, const value_type& __v) {
1118
- __begin_node_pointer const __r = __p.__get_begin () ;
1106
+ __begin_node_pointer const __r = __p.__ptr_ ;
1119
1107
__r->__next_ = this ->__create_node (/* next = */ __r->__next_ , __v);
1120
1108
return iterator (__r->__next_ );
1121
1109
}
1122
1110
1123
1111
template <class _Tp , class _Alloc >
1124
1112
typename forward_list<_Tp, _Alloc>::iterator
1125
1113
forward_list<_Tp, _Alloc>::insert_after(const_iterator __p, size_type __n, const value_type& __v) {
1126
- __begin_node_pointer __r = __p.__get_begin () ;
1114
+ __begin_node_pointer __r = __p.__ptr_ ;
1127
1115
if (__n > 0 ) {
1128
1116
__node_pointer __first = this ->__create_node (/* next = */ nullptr , __v);
1129
1117
__node_pointer __last = __first;
@@ -1161,7 +1149,7 @@ template <class _Tp, class _Alloc>
1161
1149
template <class _InputIterator , class _Sentinel >
1162
1150
_LIBCPP_HIDE_FROM_ABI typename forward_list<_Tp, _Alloc>::iterator
1163
1151
forward_list<_Tp, _Alloc>::__insert_after_with_sentinel (const_iterator __p, _InputIterator __f, _Sentinel __l) {
1164
- __begin_node_pointer __r = __p.__get_begin () ;
1152
+ __begin_node_pointer __r = __p.__ptr_ ;
1165
1153
1166
1154
if (__f != __l) {
1167
1155
__node_pointer __first = this ->__create_node (/* next = */ nullptr , *__f);
@@ -1194,7 +1182,7 @@ forward_list<_Tp, _Alloc>::__insert_after_with_sentinel(const_iterator __p, _Inp
1194
1182
1195
1183
template <class _Tp , class _Alloc >
1196
1184
typename forward_list<_Tp, _Alloc>::iterator forward_list<_Tp, _Alloc>::erase_after (const_iterator __f) {
1197
- __begin_node_pointer __p = __f.__get_begin () ;
1185
+ __begin_node_pointer __p = __f.__ptr_ ;
1198
1186
__node_pointer __n = __p->__next_ ;
1199
1187
__p->__next_ = __n->__next_ ;
1200
1188
this ->__delete_node (__n);
@@ -1204,9 +1192,9 @@ typename forward_list<_Tp, _Alloc>::iterator forward_list<_Tp, _Alloc>::erase_af
1204
1192
template <class _Tp , class _Alloc >
1205
1193
typename forward_list<_Tp, _Alloc>::iterator
1206
1194
forward_list<_Tp, _Alloc>::erase_after (const_iterator __f, const_iterator __l) {
1207
- __node_pointer __e = __l.__get_unsafe_node_pointer ( );
1195
+ __node_pointer __e = static_cast <__node_pointer>( __l.__ptr_ );
1208
1196
if (__f != __l) {
1209
- __begin_node_pointer __bp = __f.__get_begin () ;
1197
+ __begin_node_pointer __bp = __f.__ptr_ ;
1210
1198
1211
1199
__node_pointer __n = __bp->__next_ ;
1212
1200
if (__n != __e) {
@@ -1234,7 +1222,8 @@ void forward_list<_Tp, _Alloc>::resize(size_type __n) {
1234
1222
else {
1235
1223
__n -= __sz;
1236
1224
if (__n > 0 ) {
1237
- for (__begin_node_pointer __ptr = __p.__get_begin (); __n > 0 ; --__n, __ptr = __ptr->__next_as_begin ()) {
1225
+ for (__begin_node_pointer __ptr = __p.__ptr_ ; __n > 0 ;
1226
+ --__n, __ptr = static_cast <__begin_node_pointer>(__ptr->__next_ )) {
1238
1227
__ptr->__next_ = this ->__create_node (/* next = */ nullptr );
1239
1228
}
1240
1229
}
@@ -1254,7 +1243,8 @@ void forward_list<_Tp, _Alloc>::resize(size_type __n, const value_type& __v) {
1254
1243
else {
1255
1244
__n -= __sz;
1256
1245
if (__n > 0 ) {
1257
- for (__begin_node_pointer __ptr = __p.__get_begin (); __n > 0 ; --__n, __ptr = __ptr->__next_as_begin ()) {
1246
+ for (__begin_node_pointer __ptr = __p.__ptr_ ; __n > 0 ;
1247
+ --__n, __ptr = static_cast <__begin_node_pointer>(__ptr->__next_ )) {
1258
1248
__ptr->__next_ = this ->__create_node (/* next = */ nullptr , __v);
1259
1249
}
1260
1250
}
@@ -1264,13 +1254,13 @@ void forward_list<_Tp, _Alloc>::resize(size_type __n, const value_type& __v) {
1264
1254
template <class _Tp , class _Alloc >
1265
1255
void forward_list<_Tp, _Alloc>::splice_after (const_iterator __p, forward_list& __x) {
1266
1256
if (!__x.empty ()) {
1267
- if (__p.__get_begin () ->__next_ != nullptr ) {
1257
+ if (__p.__ptr_ ->__next_ != nullptr ) {
1268
1258
const_iterator __lm1 = __x.before_begin ();
1269
- while (__lm1.__get_begin () ->__next_ != nullptr )
1259
+ while (__lm1.__ptr_ ->__next_ != nullptr )
1270
1260
++__lm1;
1271
- __lm1.__get_begin () ->__next_ = __p.__get_begin () ->__next_ ;
1261
+ __lm1.__ptr_ ->__next_ = __p.__ptr_ ->__next_ ;
1272
1262
}
1273
- __p.__get_begin () ->__next_ = __x.__before_begin ()->__next_ ;
1263
+ __p.__ptr_ ->__next_ = __x.__before_begin ()->__next_ ;
1274
1264
__x.__before_begin ()->__next_ = nullptr ;
1275
1265
}
1276
1266
}
@@ -1279,9 +1269,9 @@ template <class _Tp, class _Alloc>
1279
1269
void forward_list<_Tp, _Alloc>::splice_after (const_iterator __p, forward_list& /* __other*/ , const_iterator __i) {
1280
1270
const_iterator __lm1 = std::next (__i);
1281
1271
if (__p != __i && __p != __lm1) {
1282
- __i.__get_begin () ->__next_ = __lm1.__get_begin () ->__next_ ;
1283
- __lm1.__get_begin () ->__next_ = __p.__get_begin () ->__next_ ;
1284
- __p.__get_begin () ->__next_ = __lm1.__get_unsafe_node_pointer ( );
1272
+ __i.__ptr_ ->__next_ = __lm1.__ptr_ ->__next_ ;
1273
+ __lm1.__ptr_ ->__next_ = __p.__ptr_ ->__next_ ;
1274
+ __p.__ptr_ ->__next_ = static_cast <__node_pointer>( __lm1.__ptr_ );
1285
1275
}
1286
1276
}
1287
1277
@@ -1290,12 +1280,12 @@ void forward_list<_Tp, _Alloc>::splice_after(
1290
1280
const_iterator __p, forward_list& /* __other*/ , const_iterator __f, const_iterator __l) {
1291
1281
if (__f != __l && __p != __f) {
1292
1282
const_iterator __lm1 = __f;
1293
- while (__lm1.__get_begin () ->__next_ != __l.__get_begin () )
1283
+ while (__lm1.__ptr_ ->__next_ != __l.__ptr_ )
1294
1284
++__lm1;
1295
1285
if (__f != __lm1) {
1296
- __lm1.__get_begin () ->__next_ = __p.__get_begin () ->__next_ ;
1297
- __p.__get_begin () ->__next_ = __f.__get_begin () ->__next_ ;
1298
- __f.__get_begin () ->__next_ = __l.__get_unsafe_node_pointer ( );
1286
+ __lm1.__ptr_ ->__next_ = __p.__ptr_ ->__next_ ;
1287
+ __p.__ptr_ ->__next_ = __f.__ptr_ ->__next_ ;
1288
+ __f.__ptr_ ->__next_ = static_cast <__node_pointer>( __l.__ptr_ );
1299
1289
}
1300
1290
}
1301
1291
}
@@ -1322,8 +1312,8 @@ typename forward_list<_Tp, _Alloc>::__remove_return_type forward_list<_Tp, _Allo
1322
1312
forward_list<_Tp, _Alloc> __deleted_nodes (get_allocator ()); // collect the nodes we're removing
1323
1313
typename forward_list<_Tp, _Alloc>::size_type __count_removed = 0 ;
1324
1314
const iterator __e = end ();
1325
- for (iterator __i = before_begin (); __i.__get_begin () ->__next_ != nullptr ;) {
1326
- if (__i.__get_begin () ->__next_ ->__get_value () == __v) {
1315
+ for (iterator __i = before_begin (); __i.__ptr_ ->__next_ != nullptr ;) {
1316
+ if (__i.__ptr_ ->__next_ ->__get_value () == __v) {
1327
1317
++__count_removed;
1328
1318
iterator __j = std::next (__i, 2 );
1329
1319
for (; __j != __e && *__j == __v; ++__j)
@@ -1345,8 +1335,8 @@ typename forward_list<_Tp, _Alloc>::__remove_return_type forward_list<_Tp, _Allo
1345
1335
forward_list<_Tp, _Alloc> __deleted_nodes (get_allocator ()); // collect the nodes we're removing
1346
1336
typename forward_list<_Tp, _Alloc>::size_type __count_removed = 0 ;
1347
1337
const iterator __e = end ();
1348
- for (iterator __i = before_begin (); __i.__get_begin () ->__next_ != nullptr ;) {
1349
- if (__pred (__i.__get_begin () ->__next_ ->__get_value ())) {
1338
+ for (iterator __i = before_begin (); __i.__ptr_ ->__next_ != nullptr ;) {
1339
+ if (__pred (__i.__ptr_ ->__next_ ->__get_value ())) {
1350
1340
++__count_removed;
1351
1341
iterator __j = std::next (__i, 2 );
1352
1342
for (; __j != __e && __pred (*__j); ++__j)
@@ -1372,7 +1362,7 @@ forward_list<_Tp, _Alloc>::unique(_BinaryPredicate __binary_pred) {
1372
1362
iterator __j = std::next (__i);
1373
1363
for (; __j != __e && __binary_pred (*__i, *__j); ++__j)
1374
1364
++__count_removed;
1375
- if (__i.__get_begin () ->__next_ != __j.__get_unsafe_node_pointer ( ))
1365
+ if (__i.__ptr_ ->__next_ != static_cast <__node_pointer>( __j.__ptr_ ))
1376
1366
__deleted_nodes.splice_after (__deleted_nodes.before_begin (), *this , __i, __j);
1377
1367
__i = __j;
1378
1368
}
@@ -1452,7 +1442,7 @@ forward_list<_Tp, _Alloc>::__sort(__node_pointer __f1, difference_type __sz, _Co
1452
1442
}
1453
1443
difference_type __sz1 = __sz / 2 ;
1454
1444
difference_type __sz2 = __sz - __sz1;
1455
- __node_pointer __t = std::next (iterator (__f1), __sz1 - 1 ).__get_unsafe_node_pointer ( );
1445
+ __node_pointer __t = static_cast <__node_pointer>( std::next (iterator (__f1), __sz1 - 1 ).__ptr_ );
1456
1446
__node_pointer __f2 = __t ->__next_ ;
1457
1447
__t ->__next_ = nullptr ;
1458
1448
return __merge (__sort (__f1, __sz1, __comp), __sort (__f2, __sz2, __comp), __comp);
0 commit comments