56#ifndef _STL_UNINITIALIZED_H
57#define _STL_UNINITIALIZED_H 1
59#if __cplusplus >= 201103L
66#if __cplusplus >= 201703L
70namespace std _GLIBCXX_VISIBILITY(default)
72_GLIBCXX_BEGIN_NAMESPACE_VERSION
80#if __cplusplus >= 201103L
81 template<
typename _ValueType,
typename _Tp>
83 __check_constructible()
90 static_assert(is_constructible<_ValueType, _Tp>::value,
91 "result type must be constructible from input type");
99# define _GLIBCXX_USE_ASSIGN_FOR_INIT(T, U) \
100 __is_trivial(T) && __is_assignable(T&, U) \
101 && std::__check_constructible<T, U>()
106# define _GLIBCXX_USE_ASSIGN_FOR_INIT(T, U) \
107 __is_trivial(T) && __is_assignable(T&, U)
110 template<
typename _ForwardIterator,
typename _Alloc =
void>
111 struct _UninitDestroyGuard
115 _UninitDestroyGuard(_ForwardIterator& __first, _Alloc& __a)
116 : _M_first(__first), _M_cur(__builtin_addressof(__first)), _M_alloc(__a)
120 ~_UninitDestroyGuard()
122 if (__builtin_expect(_M_cur != 0, 0))
127 void release() { _M_cur = 0; }
130 _ForwardIterator
const _M_first;
131 _ForwardIterator* _M_cur;
134 _UninitDestroyGuard(
const _UninitDestroyGuard&);
137 template<
typename _ForwardIterator>
138 struct _UninitDestroyGuard<_ForwardIterator, void>
142 _UninitDestroyGuard(_ForwardIterator& __first)
143 : _M_first(__first), _M_cur(__builtin_addressof(__first))
147 ~_UninitDestroyGuard()
149 if (__builtin_expect(_M_cur != 0, 0))
154 void release() { _M_cur = 0; }
156 _ForwardIterator
const _M_first;
157 _ForwardIterator* _M_cur;
160 _UninitDestroyGuard(
const _UninitDestroyGuard&);
163 template<
typename _InputIterator,
typename _ForwardIterator>
166 __do_uninit_copy(_InputIterator __first, _InputIterator __last,
167 _ForwardIterator __result)
169 _UninitDestroyGuard<_ForwardIterator> __guard(__result);
170 for (; __first != __last; ++__first, (void)++__result)
176 template<
bool _TrivialValueTypes>
177 struct __uninitialized_copy
179 template<
typename _InputIterator,
typename _ForwardIterator>
180 static _ForwardIterator
181 __uninit_copy(_InputIterator __first, _InputIterator __last,
182 _ForwardIterator __result)
183 {
return std::__do_uninit_copy(__first, __last, __result); }
187 struct __uninitialized_copy<true>
189 template<
typename _InputIterator,
typename _ForwardIterator>
190 static _ForwardIterator
191 __uninit_copy(_InputIterator __first, _InputIterator __last,
192 _ForwardIterator __result)
193 {
return std::copy(__first, __last, __result); }
207 template<
typename _InputIterator,
typename _ForwardIterator>
208 inline _ForwardIterator
210 _ForwardIterator __result)
220 const bool __can_memmove = __is_trivial(_ValueType1);
222#if __cplusplus < 201103L
225 using _From =
decltype(*__first);
227 const bool __assignable
228 = _GLIBCXX_USE_ASSIGN_FOR_INIT(_ValueType2, _From);
230 return std::__uninitialized_copy<__can_memmove && __assignable>::
231 __uninit_copy(__first, __last, __result);
236 template<
typename _ForwardIterator,
typename _Tp>
237 _GLIBCXX20_CONSTEXPR
void
238 __do_uninit_fill(_ForwardIterator __first, _ForwardIterator __last,
241 _UninitDestroyGuard<_ForwardIterator> __guard(__first);
242 for (; __first != __last; ++__first)
247 template<
bool _TrivialValueType>
248 struct __uninitialized_fill
250 template<
typename _ForwardIterator,
typename _Tp>
252 __uninit_fill(_ForwardIterator __first, _ForwardIterator __last,
254 { std::__do_uninit_fill(__first, __last, __x); }
258 struct __uninitialized_fill<true>
260 template<
typename _ForwardIterator,
typename _Tp>
262 __uninit_fill(_ForwardIterator __first, _ForwardIterator __last,
264 { std::fill(__first, __last, __x); }
278 template<
typename _ForwardIterator,
typename _Tp>
288 const bool __can_fill
289 = _GLIBCXX_USE_ASSIGN_FOR_INIT(_ValueType,
const _Tp&);
291 std::__uninitialized_fill<__can_fill>::
292 __uninit_fill(__first, __last, __x);
297 template<
typename _ForwardIterator,
typename _Size,
typename _Tp>
300 __do_uninit_fill_n(_ForwardIterator __first, _Size __n,
const _Tp& __x)
302 _UninitDestroyGuard<_ForwardIterator> __guard(__first);
303 for (; __n > 0; --__n, (void) ++__first)
309 template<
bool _TrivialValueType>
310 struct __uninitialized_fill_n
312 template<
typename _ForwardIterator,
typename _Size,
typename _Tp>
313 static _ForwardIterator
314 __uninit_fill_n(_ForwardIterator __first, _Size __n,
316 {
return std::__do_uninit_fill_n(__first, __n, __x); }
320 struct __uninitialized_fill_n<true>
322 template<
typename _ForwardIterator,
typename _Size,
typename _Tp>
323 static _ForwardIterator
324 __uninit_fill_n(_ForwardIterator __first, _Size __n,
326 {
return std::fill_n(__first, __n, __x); }
342 template<
typename _ForwardIterator,
typename _Size,
typename _Tp>
343 inline _ForwardIterator
351 const bool __can_fill
352 = _GLIBCXX_USE_ASSIGN_FOR_INIT(_ValueType,
const _Tp&)
356 && __is_integer<_Size>::__value;
358 return __uninitialized_fill_n<__can_fill>::
359 __uninit_fill_n(__first, __n, __x);
362#undef _GLIBCXX_USE_ASSIGN_FOR_INIT
372 template<
typename _InputIterator,
typename _ForwardIterator,
376 __uninitialized_copy_a(_InputIterator __first, _InputIterator __last,
377 _ForwardIterator __result, _Allocator& __alloc)
379 _UninitDestroyGuard<_ForwardIterator, _Allocator>
380 __guard(__result, __alloc);
383 for (; __first != __last; ++__first, (void)++__result)
390 template<
typename _InputIterator,
typename _ForwardIterator,
typename _Tp>
392 inline _ForwardIterator
393 __uninitialized_copy_a(_InputIterator __first, _InputIterator __last,
394 _ForwardIterator __result, allocator<_Tp>&)
396#ifdef __cpp_lib_is_constant_evaluated
397 if (std::is_constant_evaluated())
398 return std::__do_uninit_copy(__first, __last, __result);
404 template<
typename _InputIterator,
typename _ForwardIterator,
407 inline _ForwardIterator
408 __uninitialized_move_a(_InputIterator __first, _InputIterator __last,
409 _ForwardIterator __result, _Allocator& __alloc)
411 return std::__uninitialized_copy_a(_GLIBCXX_MAKE_MOVE_ITERATOR(__first),
412 _GLIBCXX_MAKE_MOVE_ITERATOR(__last),
416 template<
typename _InputIterator,
typename _ForwardIterator,
419 inline _ForwardIterator
420 __uninitialized_move_if_noexcept_a(_InputIterator __first,
421 _InputIterator __last,
422 _ForwardIterator __result,
425 return std::__uninitialized_copy_a
426 (_GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(__first),
427 _GLIBCXX_MAKE_MOVE_IF_NOEXCEPT_ITERATOR(__last), __result, __alloc);
430 template<
typename _ForwardIterator,
typename _Tp,
typename _Allocator>
433 __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last,
434 const _Tp& __x, _Allocator& __alloc)
436 _UninitDestroyGuard<_ForwardIterator, _Allocator>
437 __guard(__first, __alloc);
440 for (; __first != __last; ++__first)
447 template<
typename _ForwardIterator,
typename _Tp,
typename _Tp2>
450 __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last,
451 const _Tp& __x, allocator<_Tp2>&)
453#ifdef __cpp_lib_is_constant_evaluated
454 if (std::is_constant_evaluated())
455 return std::__do_uninit_fill(__first, __last, __x);
461 template<
typename _ForwardIterator,
typename _Size,
typename _Tp,
465 __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n,
466 const _Tp& __x, _Allocator& __alloc)
468 _UninitDestroyGuard<_ForwardIterator, _Allocator>
469 __guard(__first, __alloc);
471 for (; __n > 0; --__n, (void) ++__first)
478 template<
typename _ForwardIterator,
typename _Size,
typename _Tp,
481 inline _ForwardIterator
482 __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n,
483 const _Tp& __x, allocator<_Tp2>&)
485#ifdef __cpp_lib_is_constant_evaluated
486 if (std::is_constant_evaluated())
487 return std::__do_uninit_fill_n(__first, __n, __x);
502 template<
typename _InputIterator1,
typename _InputIterator2,
503 typename _ForwardIterator,
typename _Allocator>
504 inline _ForwardIterator
505 __uninitialized_copy_move(_InputIterator1 __first1,
506 _InputIterator1 __last1,
507 _InputIterator2 __first2,
508 _InputIterator2 __last2,
509 _ForwardIterator __result,
512 _ForwardIterator __mid = std::__uninitialized_copy_a(__first1, __last1,
514 _UninitDestroyGuard<_ForwardIterator, _Allocator> __guard(__result,
517 __result = std::__uninitialized_move_a(__first2, __last2, __mid, __alloc);
526 template<
typename _InputIterator1,
typename _InputIterator2,
527 typename _ForwardIterator,
typename _Allocator>
528 inline _ForwardIterator
529 __uninitialized_move_copy(_InputIterator1 __first1,
530 _InputIterator1 __last1,
531 _InputIterator2 __first2,
532 _InputIterator2 __last2,
533 _ForwardIterator __result,
536 _ForwardIterator __mid = std::__uninitialized_move_a(__first1, __last1,
538 _UninitDestroyGuard<_ForwardIterator, _Allocator> __guard(__result,
541 __result = std::__uninitialized_copy_a(__first2, __last2, __mid, __alloc);
548 template<
typename _ForwardIterator,
typename _Tp,
typename _InputIterator,
550 inline _ForwardIterator
551 __uninitialized_fill_move(_ForwardIterator __result, _ForwardIterator __mid,
552 const _Tp& __x, _InputIterator __first,
553 _InputIterator __last, _Allocator& __alloc)
555 std::__uninitialized_fill_a(__result, __mid, __x, __alloc);
556 _UninitDestroyGuard<_ForwardIterator, _Allocator> __guard(__result,
559 __result = std::__uninitialized_move_a(__first, __last, __mid, __alloc);
567 template<
typename _InputIterator,
typename _ForwardIterator,
typename _Tp,
570 __uninitialized_move_fill(_InputIterator __first1, _InputIterator __last1,
571 _ForwardIterator __first2,
572 _ForwardIterator __last2,
const _Tp& __x,
575 _ForwardIterator __mid2 = std::__uninitialized_move_a(__first1, __last1,
578 _UninitDestroyGuard<_ForwardIterator, _Allocator> __guard(__first2,
581 std::__uninitialized_fill_a(__mid2, __last2, __x, __alloc);
587#if __cplusplus >= 201103L
593 template<
bool _TrivialValueType>
594 struct __uninitialized_default_1
596 template<
typename _ForwardIterator>
598 __uninit_default(_ForwardIterator __first, _ForwardIterator __last)
600 _UninitDestroyGuard<_ForwardIterator> __guard(__first);
601 for (; __first != __last; ++__first)
608 struct __uninitialized_default_1<true>
610 template<
typename _ForwardIterator>
612 __uninit_default(_ForwardIterator __first, _ForwardIterator __last)
614 if (__first == __last)
617 typename iterator_traits<_ForwardIterator>::value_type* __val
620 if (++__first != __last)
621 std::fill(__first, __last, *__val);
625 template<
bool _TrivialValueType>
626 struct __uninitialized_default_n_1
628 template<
typename _ForwardIterator,
typename _Size>
630 static _ForwardIterator
631 __uninit_default_n(_ForwardIterator __first, _Size __n)
633 _UninitDestroyGuard<_ForwardIterator> __guard(__first);
634 for (; __n > 0; --__n, (void) ++__first)
642 struct __uninitialized_default_n_1<true>
644 template<
typename _ForwardIterator,
typename _Size>
646 static _ForwardIterator
647 __uninit_default_n(_ForwardIterator __first, _Size __n)
651 typename iterator_traits<_ForwardIterator>::value_type* __val
655 __first = std::fill_n(__first, __n - 1, *__val);
663 template<
typename _ForwardIterator>
665 __uninitialized_default(_ForwardIterator __first,
666 _ForwardIterator __last)
668 typedef typename iterator_traits<_ForwardIterator>::value_type
671 const bool __assignable = is_copy_assignable<_ValueType>::value;
673 std::__uninitialized_default_1<__is_trivial(_ValueType)
675 __uninit_default(__first, __last);
680 template<
typename _ForwardIterator,
typename _Size>
682 inline _ForwardIterator
683 __uninitialized_default_n(_ForwardIterator __first, _Size __n)
685#ifdef __cpp_lib_is_constant_evaluated
686 if (std::is_constant_evaluated())
687 return __uninitialized_default_n_1<false>::
688 __uninit_default_n(__first, __n);
691 typedef typename iterator_traits<_ForwardIterator>::value_type
694 constexpr bool __can_fill
695 = __and_<is_integral<_Size>, is_copy_assignable<_ValueType>>::value;
697 return __uninitialized_default_n_1<__is_trivial(_ValueType)
699 __uninit_default_n(__first, __n);
706 template<
typename _ForwardIterator,
typename _Allocator>
708 __uninitialized_default_a(_ForwardIterator __first,
709 _ForwardIterator __last,
712 _UninitDestroyGuard<_ForwardIterator, _Allocator> __guard(__first,
715 for (; __first != __last; ++__first)
721 template<
typename _ForwardIterator,
typename _Tp>
723 __uninitialized_default_a(_ForwardIterator __first,
724 _ForwardIterator __last,
726 { std::__uninitialized_default(__first, __last); }
732 template<
typename _ForwardIterator,
typename _Size,
typename _Allocator>
733 _GLIBCXX20_CONSTEXPR _ForwardIterator
734 __uninitialized_default_n_a(_ForwardIterator __first, _Size __n,
737 _UninitDestroyGuard<_ForwardIterator, _Allocator> __guard(__first,
740 for (; __n > 0; --__n, (void) ++__first)
749 template<
typename _ForwardIterator,
typename _Size,
typename _Tp>
751 inline _ForwardIterator
752 __uninitialized_default_n_a(_ForwardIterator __first, _Size __n,
754 {
return std::__uninitialized_default_n(__first, __n); }
757 template<
bool _TrivialValueType>
758 struct __uninitialized_default_novalue_1
760 template<
typename _ForwardIterator>
762 __uninit_default_novalue(_ForwardIterator __first,
763 _ForwardIterator __last)
765 _UninitDestroyGuard<_ForwardIterator> __guard(__first);
766 for (; __first != __last; ++__first)
773 struct __uninitialized_default_novalue_1<true>
775 template<
typename _ForwardIterator>
777 __uninit_default_novalue(_ForwardIterator, _ForwardIterator)
782 template<
bool _TrivialValueType>
783 struct __uninitialized_default_novalue_n_1
785 template<
typename _ForwardIterator,
typename _Size>
786 static _ForwardIterator
787 __uninit_default_novalue_n(_ForwardIterator __first, _Size __n)
789 _UninitDestroyGuard<_ForwardIterator> __guard(__first);
790 for (; __n > 0; --__n, (void) ++__first)
798 struct __uninitialized_default_novalue_n_1<true>
800 template<
typename _ForwardIterator,
typename _Size>
801 static _ForwardIterator
802 __uninit_default_novalue_n(_ForwardIterator __first, _Size __n)
803 {
return std::next(__first, __n); }
808 template<
typename _ForwardIterator>
810 __uninitialized_default_novalue(_ForwardIterator __first,
811 _ForwardIterator __last)
813 typedef typename iterator_traits<_ForwardIterator>::value_type
816 std::__uninitialized_default_novalue_1<
817 is_trivially_default_constructible<_ValueType>::value>::
818 __uninit_default_novalue(__first, __last);
823 template<
typename _ForwardIterator,
typename _Size>
824 inline _ForwardIterator
825 __uninitialized_default_novalue_n(_ForwardIterator __first, _Size __n)
827 typedef typename iterator_traits<_ForwardIterator>::value_type
830 return __uninitialized_default_novalue_n_1<
831 is_trivially_default_constructible<_ValueType>::value>::
832 __uninit_default_novalue_n(__first, __n);
835 template<
typename _InputIterator,
typename _Size,
836 typename _ForwardIterator>
838 __uninitialized_copy_n(_InputIterator __first, _Size __n,
839 _ForwardIterator __result, input_iterator_tag)
841 _UninitDestroyGuard<_ForwardIterator> __guard(__result);
842 for (; __n > 0; --__n, (void) ++__first, ++__result)
848 template<
typename _RandomAccessIterator,
typename _Size,
849 typename _ForwardIterator>
850 inline _ForwardIterator
851 __uninitialized_copy_n(_RandomAccessIterator __first, _Size __n,
852 _ForwardIterator __result,
853 random_access_iterator_tag)
856 template<
typename _InputIterator,
typename _Size,
857 typename _ForwardIterator>
858 pair<_InputIterator, _ForwardIterator>
859 __uninitialized_copy_n_pair(_InputIterator __first, _Size __n,
860 _ForwardIterator __result, input_iterator_tag)
862 _UninitDestroyGuard<_ForwardIterator> __guard(__result);
863 for (; __n > 0; --__n, (void) ++__first, ++__result)
866 return {__first, __result};
869 template<
typename _RandomAccessIterator,
typename _Size,
870 typename _ForwardIterator>
871 inline pair<_RandomAccessIterator, _ForwardIterator>
872 __uninitialized_copy_n_pair(_RandomAccessIterator __first, _Size __n,
873 _ForwardIterator __result,
874 random_access_iterator_tag)
877 auto __first_res = std::next(__first, __n);
878 return {__first_res, __second_res};
893 template<
typename _InputIterator,
typename _Size,
typename _ForwardIterator>
894 inline _ForwardIterator
896 _ForwardIterator __result)
897 {
return std::__uninitialized_copy_n(__first, __n, __result,
901 template<
typename _InputIterator,
typename _Size,
typename _ForwardIterator>
902 inline pair<_InputIterator, _ForwardIterator>
903 __uninitialized_copy_n_pair(_InputIterator __first, _Size __n,
904 _ForwardIterator __result)
907 std::__uninitialized_copy_n_pair(__first, __n, __result,
913#ifdef __glibcxx_raw_memory_algorithms
920 template <
typename _ForwardIterator>
923 _ForwardIterator __last)
925 std::__uninitialized_default_novalue(__first, __last);
935 template <
typename _ForwardIterator,
typename _Size>
936 inline _ForwardIterator
939 return std::__uninitialized_default_novalue_n(__first, __count);
948 template <
typename _ForwardIterator>
951 _ForwardIterator __last)
953 return std::__uninitialized_default(__first, __last);
963 template <
typename _ForwardIterator,
typename _Size>
964 inline _ForwardIterator
967 return std::__uninitialized_default_n(__first, __count);
978 template <
typename _InputIterator,
typename _ForwardIterator>
979 inline _ForwardIterator
981 _ForwardIterator __result)
984 (_GLIBCXX_MAKE_MOVE_ITERATOR(__first),
985 _GLIBCXX_MAKE_MOVE_ITERATOR(__last), __result);
996 template <
typename _InputIterator,
typename _Size,
typename _ForwardIterator>
997 inline pair<_InputIterator, _ForwardIterator>
999 _ForwardIterator __result)
1001 auto __res = std::__uninitialized_copy_n_pair
1002 (_GLIBCXX_MAKE_MOVE_ITERATOR(__first),
1004 return {__res.first.base(), __res.second};
1008#if __cplusplus >= 201103L
1011 template<
typename _Tp,
typename _Up,
typename _Allocator>
1012 _GLIBCXX20_CONSTEXPR
1014 __relocate_object_a(_Tp* __restrict __dest, _Up* __restrict __orig,
1015 _Allocator& __alloc)
1022 __traits::construct(__alloc, __dest,
std::move(*__orig));
1028 template<
typename _Tp,
typename =
void>
1029 struct __is_bitwise_relocatable
1030 : is_trivial<_Tp> { };
1032 template <
typename _InputIterator,
typename _ForwardIterator,
1033 typename _Allocator>
1034 _GLIBCXX20_CONSTEXPR
1035 inline _ForwardIterator
1036 __relocate_a_1(_InputIterator __first, _InputIterator __last,
1037 _ForwardIterator __result, _Allocator& __alloc)
1038 noexcept(
noexcept(std::__relocate_object_a(
std::addressof(*__result),
1042 typedef typename iterator_traits<_InputIterator>::value_type
1044 typedef typename iterator_traits<_ForwardIterator>::value_type
1047 "relocation is only possible for values of the same type");
1048 _ForwardIterator __cur = __result;
1049 for (; __first != __last; ++__first, (void)++__cur)
1056 template <
typename _Tp,
typename _Up>
1057 _GLIBCXX20_CONSTEXPR
1058 inline __enable_if_t<std::__is_bitwise_relocatable<_Tp>::value, _Tp*>
1059 __relocate_a_1(_Tp* __first, _Tp* __last,
1061 [[__maybe_unused__]] allocator<_Up>& __alloc)
noexcept
1063 ptrdiff_t __count = __last - __first;
1066#ifdef __cpp_lib_is_constant_evaluated
1067 if (std::is_constant_evaluated())
1071 __gnu_cxx::__normal_iterator<_Tp*, void> __out(__result);
1072 __out = std::__relocate_a_1(__first, __last, __out, __alloc);
1073 return __out.base();
1076 __builtin_memcpy(__result, __first, __count *
sizeof(_Tp));
1078 return __result + __count;
1082 template <
typename _InputIterator,
typename _ForwardIterator,
1083 typename _Allocator>
1084 _GLIBCXX20_CONSTEXPR
1085 inline _ForwardIterator
1086 __relocate_a(_InputIterator __first, _InputIterator __last,
1087 _ForwardIterator __result, _Allocator& __alloc)
1088 noexcept(
noexcept(__relocate_a_1(std::__niter_base(__first),
1089 std::__niter_base(__last),
1090 std::__niter_base(__result), __alloc)))
1092 return std::__relocate_a_1(std::__niter_base(__first),
1093 std::__niter_base(__last),
1094 std::__niter_base(__result), __alloc);
1102_GLIBCXX_END_NAMESPACE_VERSION
_ForwardIterator uninitialized_copy_n(_InputIterator __first, _Size __n, _ForwardIterator __result)
Copies the range [first,first+n) into result.
void uninitialized_fill(_ForwardIterator __first, _ForwardIterator __last, const _Tp &__x)
Copies the value x into the range [first,last).
_ForwardIterator uninitialized_value_construct_n(_ForwardIterator __first, _Size __count)
Value-initializes objects in the range [first,first+count).
_ForwardIterator uninitialized_move(_InputIterator __first, _InputIterator __last, _ForwardIterator __result)
Move-construct from the range [first,last) into result.
_ForwardIterator uninitialized_fill_n(_ForwardIterator __first, _Size __n, const _Tp &__x)
Copies the value x into the range [first,first+n).
_ForwardIterator uninitialized_default_construct_n(_ForwardIterator __first, _Size __count)
Default-initializes objects in the range [first,first+count).
void uninitialized_default_construct(_ForwardIterator __first, _ForwardIterator __last)
Default-initializes objects in the range [first,last).
_ForwardIterator uninitialized_copy(_InputIterator __first, _InputIterator __last, _ForwardIterator __result)
Copies the range [first,last) into result.
void uninitialized_value_construct(_ForwardIterator __first, _ForwardIterator __last)
Value-initializes objects in the range [first,last).
pair< _InputIterator, _ForwardIterator > uninitialized_move_n(_InputIterator __first, _Size __count, _ForwardIterator __result)
Move-construct from the range [first,first+count) into result.
constexpr _Tp * addressof(_Tp &__r) noexcept
Returns the actual address of the object or function referenced by r, even in the presence of an over...
constexpr std::remove_reference< _Tp >::type && move(_Tp &&__t) noexcept
Convert a value to an rvalue.
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
constexpr iterator_traits< _Iter >::iterator_category __iterator_category(const _Iter &)
ISO C++ entities toplevel namespace is std.
constexpr void _Construct(_Tp *__p, _Args &&... __args)
constexpr void _Destroy(_ForwardIterator __first, _ForwardIterator __last)
Uniform interface to all allocator types.
static constexpr void construct(_Alloc &__a, _Tp *__p, _Args &&... __args) noexcept(_S_nothrow_construct< _Tp, _Args... >())
Construct an object of type _Tp
Traits class for iterators.
Uniform interface to C++98 and C++11 allocators.