260 using value_type = _ITp;
261 using difference_type = value_type;
264 typedef _ITp __int_type;
266 static constexpr int _S_alignment =
267 sizeof(_ITp) >
alignof(_ITp) ?
sizeof(_ITp) :
alignof(_ITp);
269 alignas(_S_alignment) __int_type _M_i;
281 operator __int_type()
const noexcept
284 operator __int_type()
const volatile noexcept
288 operator=(__int_type __i)
noexcept
295 operator=(__int_type __i)
volatile noexcept
302 operator++(
int)
noexcept
303 {
return fetch_add(1); }
306 operator++(
int)
volatile noexcept
307 {
return fetch_add(1); }
310 operator--(
int)
noexcept
311 {
return fetch_sub(1); }
314 operator--(
int)
volatile noexcept
315 {
return fetch_sub(1); }
318 operator++()
noexcept
322 operator++()
volatile noexcept
326 operator--()
noexcept
330 operator--()
volatile noexcept
334 operator+=(__int_type __i)
noexcept
338 operator+=(__int_type __i)
volatile noexcept
342 operator-=(__int_type __i)
noexcept
346 operator-=(__int_type __i)
volatile noexcept
350 operator&=(__int_type __i)
noexcept
354 operator&=(__int_type __i)
volatile noexcept
358 operator|=(__int_type __i)
noexcept
362 operator|=(__int_type __i)
volatile noexcept
366 operator^=(__int_type __i)
noexcept
370 operator^=(__int_type __i)
volatile noexcept
374 is_lock_free()
const noexcept
378 reinterpret_cast<void *
>(-_S_alignment));
382 is_lock_free()
const volatile noexcept
386 reinterpret_cast<void *
>(-_S_alignment));
389 _GLIBCXX_ALWAYS_INLINE
void
390 store(__int_type __i,
memory_order __m = memory_order_seq_cst)
noexcept
393 __glibcxx_assert(__b != memory_order_acquire);
394 __glibcxx_assert(__b != memory_order_acq_rel);
395 __glibcxx_assert(__b != memory_order_consume);
400 _GLIBCXX_ALWAYS_INLINE
void
401 store(__int_type __i,
402 memory_order __m = memory_order_seq_cst)
volatile noexcept
405 __glibcxx_assert(__b != memory_order_acquire);
406 __glibcxx_assert(__b != memory_order_acq_rel);
407 __glibcxx_assert(__b != memory_order_consume);
412 _GLIBCXX_ALWAYS_INLINE __int_type
413 load(
memory_order __m = memory_order_seq_cst)
const noexcept
416 __glibcxx_assert(__b != memory_order_release);
417 __glibcxx_assert(__b != memory_order_acq_rel);
422 _GLIBCXX_ALWAYS_INLINE __int_type
423 load(
memory_order __m = memory_order_seq_cst)
const volatile noexcept
426 __glibcxx_assert(__b != memory_order_release);
427 __glibcxx_assert(__b != memory_order_acq_rel);
432 _GLIBCXX_ALWAYS_INLINE __int_type
440 _GLIBCXX_ALWAYS_INLINE __int_type
442 memory_order __m = memory_order_seq_cst)
volatile noexcept
447 _GLIBCXX_ALWAYS_INLINE
bool
448 compare_exchange_weak(__int_type&
__i1, __int_type
__i2,
453 __glibcxx_assert(
__b2 != memory_order_release);
454 __glibcxx_assert(
__b2 != memory_order_acq_rel);
455 __glibcxx_assert(
__b2 <= __b1);
461 _GLIBCXX_ALWAYS_INLINE
bool
462 compare_exchange_weak(__int_type&
__i1, __int_type
__i2,
468 __glibcxx_assert(
__b2 != memory_order_release);
469 __glibcxx_assert(
__b2 != memory_order_acq_rel);
470 __glibcxx_assert(
__b2 <= __b1);
476 _GLIBCXX_ALWAYS_INLINE
bool
477 compare_exchange_weak(__int_type&
__i1, __int_type
__i2,
480 return compare_exchange_weak(
__i1,
__i2, __m,
481 __cmpexch_failure_order(__m));
484 _GLIBCXX_ALWAYS_INLINE
bool
485 compare_exchange_weak(__int_type&
__i1, __int_type
__i2,
486 memory_order __m = memory_order_seq_cst)
volatile noexcept
488 return compare_exchange_weak(
__i1,
__i2, __m,
489 __cmpexch_failure_order(__m));
492 _GLIBCXX_ALWAYS_INLINE
bool
493 compare_exchange_strong(__int_type&
__i1, __int_type
__i2,
498 __glibcxx_assert(
__b2 != memory_order_release);
499 __glibcxx_assert(
__b2 != memory_order_acq_rel);
500 __glibcxx_assert(
__b2 <= __b1);
506 _GLIBCXX_ALWAYS_INLINE
bool
507 compare_exchange_strong(__int_type&
__i1, __int_type
__i2,
514 __glibcxx_assert(
__b2 != memory_order_release);
515 __glibcxx_assert(
__b2 != memory_order_acq_rel);
516 __glibcxx_assert(
__b2 <= __b1);
522 _GLIBCXX_ALWAYS_INLINE
bool
523 compare_exchange_strong(__int_type&
__i1, __int_type
__i2,
526 return compare_exchange_strong(
__i1,
__i2, __m,
527 __cmpexch_failure_order(__m));
530 _GLIBCXX_ALWAYS_INLINE
bool
531 compare_exchange_strong(__int_type&
__i1, __int_type
__i2,
532 memory_order __m = memory_order_seq_cst)
volatile noexcept
534 return compare_exchange_strong(
__i1,
__i2, __m,
535 __cmpexch_failure_order(__m));
538 _GLIBCXX_ALWAYS_INLINE __int_type
539 fetch_add(__int_type __i,
543 _GLIBCXX_ALWAYS_INLINE __int_type
544 fetch_add(__int_type __i,
545 memory_order __m = memory_order_seq_cst)
volatile noexcept
548 _GLIBCXX_ALWAYS_INLINE __int_type
549 fetch_sub(__int_type __i,
553 _GLIBCXX_ALWAYS_INLINE __int_type
554 fetch_sub(__int_type __i,
555 memory_order __m = memory_order_seq_cst)
volatile noexcept
558 _GLIBCXX_ALWAYS_INLINE __int_type
563 _GLIBCXX_ALWAYS_INLINE __int_type
565 memory_order __m = memory_order_seq_cst)
volatile noexcept
568 _GLIBCXX_ALWAYS_INLINE __int_type
573 _GLIBCXX_ALWAYS_INLINE __int_type
575 memory_order __m = memory_order_seq_cst)
volatile noexcept
578 _GLIBCXX_ALWAYS_INLINE __int_type
583 _GLIBCXX_ALWAYS_INLINE __int_type
585 memory_order __m = memory_order_seq_cst)
volatile noexcept
601 _M_type_size(
ptrdiff_t __d)
const {
return __d *
sizeof(
_PTp); }
604 _M_type_size(
ptrdiff_t __d)
const volatile {
return __d *
sizeof(
_PTp); }
637 operator++(
int)
noexcept
638 {
return fetch_add(1); }
641 operator++(
int)
volatile noexcept
642 {
return fetch_add(1); }
645 operator--(
int)
noexcept
646 {
return fetch_sub(1); }
649 operator--(
int)
volatile noexcept
650 {
return fetch_sub(1); }
653 operator++()
noexcept
655 int(memory_order_seq_cst)); }
658 operator++()
volatile noexcept
660 int(memory_order_seq_cst)); }
663 operator--()
noexcept
665 int(memory_order_seq_cst)); }
668 operator--()
volatile noexcept
670 int(memory_order_seq_cst)); }
675 int(memory_order_seq_cst)); }
678 operator+=(
ptrdiff_t __d)
volatile noexcept
680 int(memory_order_seq_cst)); }
685 int(memory_order_seq_cst)); }
688 operator-=(
ptrdiff_t __d)
volatile noexcept
690 int(memory_order_seq_cst)); }
693 is_lock_free()
const noexcept
697 reinterpret_cast<void *
>(-
__alignof(_M_p)));
701 is_lock_free()
const volatile noexcept
705 reinterpret_cast<void *
>(-
__alignof(_M_p)));
708 _GLIBCXX_ALWAYS_INLINE
void
714 __glibcxx_assert(__b != memory_order_acquire);
715 __glibcxx_assert(__b != memory_order_acq_rel);
716 __glibcxx_assert(__b != memory_order_consume);
721 _GLIBCXX_ALWAYS_INLINE
void
723 memory_order __m = memory_order_seq_cst)
volatile noexcept
726 __glibcxx_assert(__b != memory_order_acquire);
727 __glibcxx_assert(__b != memory_order_acq_rel);
728 __glibcxx_assert(__b != memory_order_consume);
734 load(
memory_order __m = memory_order_seq_cst)
const noexcept
737 __glibcxx_assert(__b != memory_order_release);
738 __glibcxx_assert(__b != memory_order_acq_rel);
744 load(
memory_order __m = memory_order_seq_cst)
const volatile noexcept
747 __glibcxx_assert(__b != memory_order_release);
748 __glibcxx_assert(__b != memory_order_acq_rel);
763 memory_order __m = memory_order_seq_cst)
volatile noexcept
768 _GLIBCXX_ALWAYS_INLINE
bool
775 __glibcxx_assert(
__b2 != memory_order_release);
776 __glibcxx_assert(
__b2 != memory_order_acq_rel);
777 __glibcxx_assert(
__b2 <= __b1);
783 _GLIBCXX_ALWAYS_INLINE
bool
791 __glibcxx_assert(
__b2 != memory_order_release);
792 __glibcxx_assert(
__b2 != memory_order_acq_rel);
793 __glibcxx_assert(
__b2 <= __b1);
806 memory_order __m = memory_order_seq_cst)
volatile noexcept
816 memory_order __m = memory_order_seq_cst)
volatile noexcept