978 using _Base::get_allocator;
986 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
989 {
return iterator(this->_M_impl._M_start); }
996 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
999 {
return const_iterator(this->_M_impl._M_start); }
1006 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
1009 {
return iterator(this->_M_impl._M_finish); }
1016 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
1019 {
return const_iterator(this->_M_impl._M_finish); }
1026 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
1029 {
return reverse_iterator(
end()); }
1036 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
1037 const_reverse_iterator
1039 {
return const_reverse_iterator(
end()); }
1046 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
1049 {
return reverse_iterator(
begin()); }
1056 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
1057 const_reverse_iterator
1059 {
return const_reverse_iterator(
begin()); }
1061#if __cplusplus >= 201103L
1067 [[__nodiscard__]] _GLIBCXX20_CONSTEXPR
1070 {
return const_iterator(this->_M_impl._M_start); }
1077 [[__nodiscard__]] _GLIBCXX20_CONSTEXPR
1080 {
return const_iterator(this->_M_impl._M_finish); }
1087 [[__nodiscard__]] _GLIBCXX20_CONSTEXPR
1088 const_reverse_iterator
1090 {
return const_reverse_iterator(
end()); }
1097 [[__nodiscard__]] _GLIBCXX20_CONSTEXPR
1098 const_reverse_iterator
1100 {
return const_reverse_iterator(
begin()); }
1105 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
1109 ptrdiff_t __dif = this->_M_impl._M_finish - this->_M_impl._M_start;
1111 __builtin_unreachable();
1112 return size_type(__dif);
1116 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
1119 {
return _S_max_size(_M_get_Tp_allocator()); }
1121#if __cplusplus >= 201103L
1131 _GLIBCXX20_CONSTEXPR
1135 if (__new_size >
size())
1136 _M_default_append(__new_size -
size());
1137 else if (__new_size <
size())
1138 _M_erase_at_end(this->_M_impl._M_start + __new_size);
1152 _GLIBCXX20_CONSTEXPR
1154 resize(size_type __new_size,
const value_type& __x)
1156 if (__new_size >
size())
1157 _M_fill_append(__new_size -
size(), __x);
1158 else if (__new_size <
size())
1159 _M_erase_at_end(this->_M_impl._M_start + __new_size);
1173 _GLIBCXX20_CONSTEXPR
1177 if (__new_size >
size())
1178 _M_fill_append(__new_size -
size(), __x);
1179 else if (__new_size <
size())
1180 _M_erase_at_end(this->_M_impl._M_start + __new_size);
1184#if __cplusplus >= 201103L
1186 _GLIBCXX20_CONSTEXPR
1189 { _M_shrink_to_fit(); }
1196 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
1200 ptrdiff_t __dif = this->_M_impl._M_end_of_storage
1201 - this->_M_impl._M_start;
1203 __builtin_unreachable();
1204 return size_type(__dif);
1211 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
1233 _GLIBCXX20_CONSTEXPR
1249 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
1253 __glibcxx_requires_subscript(__n);
1254 return *(this->_M_impl._M_start + __n);
1268 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
1272 __glibcxx_requires_subscript(__n);
1273 return *(this->_M_impl._M_start + __n);
1278 _GLIBCXX20_CONSTEXPR
1282 if (__n >= this->
size())
1283 __throw_out_of_range_fmt(__N(
"vector::_M_range_check: __n "
1284 "(which is %zu) >= this->size() "
1301 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
1306 return (*
this)[__n];
1320 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
1325 return (*
this)[__n];
1332 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
1336 __glibcxx_requires_nonempty();
1344 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
1348 __glibcxx_requires_nonempty();
1356 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
1360 __glibcxx_requires_nonempty();
1361 return *(
end() - 1);
1368 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
1372 __glibcxx_requires_nonempty();
1373 return *(
end() - 1);
1383 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
1386 {
return _M_data_ptr(this->_M_impl._M_start); }
1388 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
1390 data() const _GLIBCXX_NOEXCEPT
1391 {
return _M_data_ptr(this->_M_impl._M_start); }
1404 _GLIBCXX20_CONSTEXPR
1408 if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
1410 _GLIBCXX_ASAN_ANNOTATE_GROW(1);
1411 _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
1413 ++this->_M_impl._M_finish;
1414 _GLIBCXX_ASAN_ANNOTATE_GREW(1);
1417 _M_realloc_append(__x);
1420#if __cplusplus >= 201103L
1421 _GLIBCXX20_CONSTEXPR
1426 template<
typename... _Args>
1427#if __cplusplus > 201402L
1428 _GLIBCXX20_CONSTEXPR
1433 emplace_back(_Args&&... __args);
1445 _GLIBCXX20_CONSTEXPR
1449 __glibcxx_requires_nonempty();
1450 --this->_M_impl._M_finish;
1451 _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish);
1452 _GLIBCXX_ASAN_ANNOTATE_SHRINK(1);
1455#if __cplusplus >= 201103L
1468 template<
typename... _Args>
1469 _GLIBCXX20_CONSTEXPR
1471 emplace(const_iterator __position, _Args&&... __args)
1485 _GLIBCXX20_CONSTEXPR
1487 insert(const_iterator __position,
const value_type& __x);
1501 insert(iterator __position,
const value_type& __x);
1504#if __cplusplus >= 201103L
1516 _GLIBCXX20_CONSTEXPR
1518 insert(const_iterator __position, value_type&& __x)
1519 {
return _M_insert_rval(__position,
std::move(__x)); }
1534 _GLIBCXX20_CONSTEXPR
1538 auto __offset = __position -
cbegin();
1539 _M_range_insert(
begin() + __offset, __l.begin(), __l.end(),
1541 return begin() + __offset;
1545#if __cplusplus >= 201103L
1560 _GLIBCXX20_CONSTEXPR
1562 insert(const_iterator __position, size_type __n,
const value_type& __x)
1564 difference_type __offset = __position -
cbegin();
1565 _M_fill_insert(
begin() + __offset, __n, __x);
1566 return begin() + __offset;
1584 { _M_fill_insert(__position, __n, __x); }
1587#if __cplusplus >= 201103L
1603 template<
typename _InputIterator,
1604 typename = std::_RequireInputIter<_InputIterator>>
1605 _GLIBCXX20_CONSTEXPR
1607 insert(const_iterator __position, _InputIterator __first,
1608 _InputIterator __last)
1610 difference_type __offset = __position -
cbegin();
1611 _M_range_insert(
begin() + __offset, __first, __last,
1613 return begin() + __offset;
1630 template<
typename _InputIterator>
1633 _InputIterator __last)
1636 typedef typename std::__is_integer<_InputIterator>::__type _Integral;
1637 _M_insert_dispatch(__position, __first, __last, _Integral());
1641#if __glibcxx_containers_ranges
1650 template<__detail::__container_compatible_range<_Tp> _Rg>
1652 insert_range(const_iterator __pos, _Rg&& __rg);
1659 template<__detail::__container_compatible_range<_Tp> _Rg>
1661 append_range(_Rg&& __rg)
1666 if constexpr (ranges::forward_range<_Rg> || ranges::sized_range<_Rg>)
1668 const auto __n = size_type(ranges::distance(__rg));
1675 const auto __sz =
size();
1676 const auto __capacity =
capacity();
1677 if ((__capacity - __sz) >= __n)
1679 _GLIBCXX_ASAN_ANNOTATE_GROW(__n);
1680 _Base::_M_append_range(__rg);
1681 _GLIBCXX_ASAN_ANNOTATE_GREW(__n);
1685 const size_type __len = _M_check_len(__n,
"vector::append_range");
1687 pointer __old_start = this->_M_impl._M_start;
1688 pointer __old_finish = this->_M_impl._M_finish;
1690 allocator_type& __a = _M_get_Tp_allocator();
1691 const pointer __start = this->_M_allocate(__len);
1692 const pointer __mid = __start + __sz;
1693 const pointer __back = __mid + __n;
1694 _Guard_alloc __guard(__start, __len, *
this);
1695 std::__uninitialized_copy_a(ranges::begin(__rg),
1699 if constexpr (_S_use_relocate())
1700 _S_relocate(__old_start, __old_finish, __start, __a);
1706 pointer _M_first, _M_last;
1707 _Tp_alloc_type& _M_alloc;
1710 _Guard_elts(pointer __f, pointer __l, _Tp_alloc_type& __a)
1711 : _M_first(__f), _M_last(__l), _M_alloc(__a)
1718 _Guard_elts(_Guard_elts&&) =
delete;
1720 _Guard_elts __guard_elts{__mid, __back, __a};
1722 std::__uninitialized_move_a(__old_start, __old_finish,
1726 __guard_elts._M_first = __old_start;
1727 __guard_elts._M_last = __old_finish;
1731 __guard._M_storage = __old_start;
1732 __guard._M_len = __capacity;
1734 this->_M_impl._M_start = __start;
1735 this->_M_impl._M_finish = __back;
1736 this->_M_impl._M_end_of_storage = __start + __len;
1740 auto __first = ranges::begin(__rg);
1741 const auto __last = ranges::end(__rg);
1745 __first != __last && __free > 0;
1746 ++__first, (void) --__free)
1747 emplace_back(*__first);
1749 if (__first == __last)
1753 vector __tmp(_M_get_Tp_allocator());
1754 for (; __first != __last; ++__first)
1755 __tmp.emplace_back(*__first);
1756 reserve(_M_check_len(__tmp.size(),
"vector::append_range"));
1757 ranges::subrange __r(std::make_move_iterator(__tmp.begin()),
1758 std::make_move_iterator(__tmp.end()));
1779 _GLIBCXX20_CONSTEXPR
1781#if __cplusplus >= 201103L
1783 {
return _M_erase(
begin() + (__position -
cbegin())); }
1786 {
return _M_erase(__position); }
1807 _GLIBCXX20_CONSTEXPR
1809#if __cplusplus >= 201103L
1810 erase(const_iterator __first, const_iterator __last)
1812 const auto __beg =
begin();
1813 const auto __cbeg =
cbegin();
1814 return _M_erase(__beg + (__first - __cbeg), __beg + (__last - __cbeg));
1818 {
return _M_erase(__first, __last); }
1832 _GLIBCXX20_CONSTEXPR
1836#if __cplusplus >= 201103L
1837 __glibcxx_assert(_Alloc_traits::propagate_on_container_swap::value
1838 || _M_get_Tp_allocator() == __x._M_get_Tp_allocator());
1840 this->_M_impl._M_swap_data(__x._M_impl);
1841 _Alloc_traits::_S_on_swap(_M_get_Tp_allocator(),
1842 __x._M_get_Tp_allocator());
1851 _GLIBCXX20_CONSTEXPR
1854 { _M_erase_at_end(this->_M_impl._M_start); }
1864 _GLIBCXX20_CONSTEXPR
1865 _Guard_alloc(pointer __s,
size_type __l, _Base& __vect)
1866 : _M_storage(__s), _M_len(__l), _M_vect(__vect)
1869 _GLIBCXX20_CONSTEXPR
1873 _M_vect._M_deallocate(_M_storage, _M_len);
1876 _GLIBCXX20_CONSTEXPR
1880 pointer __res = _M_storage;
1881 _M_storage = pointer();
1886 _Guard_alloc(
const _Guard_alloc&);
1894 template<
typename _ForwardIterator>
1895 _GLIBCXX20_CONSTEXPR
1898 _ForwardIterator __first, _ForwardIterator __last)
1900 _Guard_alloc __guard(this->_M_allocate(__n), __n, *
this);
1901 std::__uninitialized_copy_a
1902 (__first, __last, __guard._M_storage, _M_get_Tp_allocator());
1903 return __guard._M_release();
1911#if __cplusplus < 201103L
1914 template<
typename _Integer>
1916 _M_initialize_dispatch(_Integer __int_n, _Integer __value, __true_type)
1920 _M_allocate(_S_check_init_len(__n, _M_get_Tp_allocator()));
1921 this->_M_impl._M_start = __start;
1922 this->_M_impl._M_end_of_storage = __start + __n;
1923 _M_fill_initialize(__n, __value);
1927 template<
typename _InputIterator>
1929 _M_initialize_dispatch(_InputIterator __first, _InputIterator __last,
1932 _M_range_initialize(__first, __last,
1938 template<
typename _InputIterator>
1939 _GLIBCXX20_CONSTEXPR
1941 _M_range_initialize(_InputIterator __first, _InputIterator __last,
1942 std::input_iterator_tag)
1945 for (; __first != __last; ++__first)
1946#
if __cplusplus >= 201103L
1947 emplace_back(*__first);
1953 __throw_exception_again;
1958 template<
typename _ForwardIterator>
1959 _GLIBCXX20_CONSTEXPR
1961 _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last,
1962 std::forward_iterator_tag)
1964 _M_range_initialize_n(__first, __last,
1968 template<
typename _Iterator,
typename _Sentinel>
1969 _GLIBCXX20_CONSTEXPR
1971 _M_range_initialize_n(_Iterator __first, _Sentinel __last,
1975 this->_M_allocate(_S_check_init_len(__n, _M_get_Tp_allocator()));
1976 this->_M_impl._M_start = this->_M_impl._M_finish = __start;
1977 this->_M_impl._M_end_of_storage = __start + __n;
1978 this->_M_impl._M_finish
1979 = std::__uninitialized_copy_a(_GLIBCXX_MOVE(__first), __last,
1980 __start, _M_get_Tp_allocator());
1985 _GLIBCXX20_CONSTEXPR
1987 _M_fill_initialize(size_type __n,
const value_type& __value)
1989 this->_M_impl._M_finish =
1990 std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, __value,
1991 _M_get_Tp_allocator());
1994#if __cplusplus >= 201103L
1996 _GLIBCXX20_CONSTEXPR
1998 _M_default_initialize(size_type __n)
2000 this->_M_impl._M_finish =
2001 std::__uninitialized_default_n_a(this->_M_impl._M_start, __n,
2002 _M_get_Tp_allocator());
2013 template<
typename _Integer>
2014 _GLIBCXX20_CONSTEXPR
2016 _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
2017 { _M_fill_assign(__n, __val); }
2020 template<
typename _InputIterator>
2021 _GLIBCXX20_CONSTEXPR
2023 _M_assign_dispatch(_InputIterator __first, _InputIterator __last,
2028 template<
typename _InputIterator>
2029 _GLIBCXX20_CONSTEXPR
2031 _M_assign_aux(_InputIterator __first, _InputIterator __last,
2032 std::input_iterator_tag);
2035 template<
typename _ForwardIterator>
2036 _GLIBCXX20_CONSTEXPR
2038 _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
2039 std::forward_iterator_tag);
2043 _GLIBCXX20_CONSTEXPR
2045 _M_fill_assign(size_type __n,
const value_type& __val);
2053 template<
typename _Integer>
2054 _GLIBCXX20_CONSTEXPR
2056 _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __val,
2058 { _M_fill_insert(__pos, __n, __val); }
2061 template<
typename _InputIterator>
2062 _GLIBCXX20_CONSTEXPR
2064 _M_insert_dispatch(iterator __pos, _InputIterator __first,
2065 _InputIterator __last, __false_type)
2067 _M_range_insert(__pos, __first, __last,
2072 template<
typename _InputIterator>
2073 _GLIBCXX20_CONSTEXPR
2075 _M_range_insert(iterator __pos, _InputIterator __first,
2076 _InputIterator __last, std::input_iterator_tag);
2079 template<
typename _ForwardIterator>
2080 _GLIBCXX20_CONSTEXPR
2082 _M_range_insert(iterator __pos, _ForwardIterator __first,
2083 _ForwardIterator __last, std::forward_iterator_tag);
2087 _GLIBCXX20_CONSTEXPR
2089 _M_fill_insert(iterator __pos, size_type __n,
const value_type& __x);
2092 _GLIBCXX20_CONSTEXPR
2094 _M_fill_append(size_type __n,
const value_type& __x);
2096#if __cplusplus >= 201103L
2098 _GLIBCXX20_CONSTEXPR
2100 _M_default_append(size_type __n);
2102 _GLIBCXX20_CONSTEXPR
2107#if __cplusplus < 201103L
2110 _M_insert_aux(iterator __position,
const value_type& __x);
2113 _M_realloc_insert(iterator __position,
const value_type& __x);
2116 _M_realloc_append(
const value_type& __x);
2120 struct _Temporary_value
2122 template<
typename... _Args>
2123 _GLIBCXX20_CONSTEXPR
explicit
2124 _Temporary_value(
vector* __vec, _Args&&... __args) : _M_this(__vec)
2126 _Alloc_traits::construct(_M_this->_M_impl, _M_ptr(),
2130 _GLIBCXX20_CONSTEXPR
2132 { _Alloc_traits::destroy(_M_this->_M_impl, _M_ptr()); }
2134 _GLIBCXX20_CONSTEXPR value_type&
2135 _M_val() noexcept {
return _M_storage._M_val; }
2138 _GLIBCXX20_CONSTEXPR _Tp*
2143 constexpr _Storage() : _M_byte() { }
2144 _GLIBCXX20_CONSTEXPR ~_Storage() { }
2145 _Storage& operator=(
const _Storage&) =
delete;
2146 unsigned char _M_byte;
2151 _Storage _M_storage;
2156 template<
typename _Arg>
2157 _GLIBCXX20_CONSTEXPR
2159 _M_insert_aux(iterator __position, _Arg&& __arg);
2161 template<
typename... _Args>
2162 _GLIBCXX20_CONSTEXPR
2164 _M_realloc_insert(iterator __position, _Args&&... __args);
2166 template<
typename... _Args>
2167 _GLIBCXX20_CONSTEXPR
2169 _M_realloc_append(_Args&&... __args);
2172 _GLIBCXX20_CONSTEXPR
2174 _M_insert_rval(const_iterator __position, value_type&& __v);
2177 template<
typename... _Args>
2178 _GLIBCXX20_CONSTEXPR
2180 _M_emplace_aux(const_iterator __position, _Args&&... __args);
2183 _GLIBCXX20_CONSTEXPR
2185 _M_emplace_aux(const_iterator __position, value_type&& __v)
2186 {
return _M_insert_rval(__position,
std::move(__v)); }
2190 _GLIBCXX20_CONSTEXPR
2192 _M_check_len(size_type __n,
const char* __s)
const
2195 __throw_length_error(__N(__s));
2202 static _GLIBCXX20_CONSTEXPR size_type
2203 _S_check_init_len(size_type __n,
const allocator_type& __a)
2205 if (__n > _S_max_size(_Tp_alloc_type(__a)))
2206 __throw_length_error(
2207 __N(
"cannot create std::vector larger than max_size()"));
2211 static _GLIBCXX20_CONSTEXPR size_type
2212 _S_max_size(
const _Tp_alloc_type& __a) _GLIBCXX_NOEXCEPT
2217 const size_t __diffmax
2218 = __gnu_cxx::__numeric_traits<ptrdiff_t>::__max /
sizeof(_Tp);
2220 return (
std::min)(__diffmax, __allocmax);
2227 _GLIBCXX20_CONSTEXPR
2229 _M_erase_at_end(pointer __pos) _GLIBCXX_NOEXCEPT
2231 if (size_type __n = this->_M_impl._M_finish - __pos)
2234 _M_get_Tp_allocator());
2235 this->_M_impl._M_finish = __pos;
2236 _GLIBCXX_ASAN_ANNOTATE_SHRINK(__n);
2240 _GLIBCXX20_CONSTEXPR
2242 _M_erase(iterator __position);
2244 _GLIBCXX20_CONSTEXPR
2246 _M_erase(iterator __first, iterator __last);
2248#if __cplusplus >= 201103L
2253 _GLIBCXX20_CONSTEXPR
2258 this->_M_impl._M_swap_data(__x._M_impl);
2259 __tmp._M_impl._M_swap_data(__x._M_impl);
2260 std::__alloc_on_move(_M_get_Tp_allocator(), __x._M_get_Tp_allocator());
2265 _GLIBCXX20_CONSTEXPR
2269 if (__x._M_get_Tp_allocator() == this->_M_get_Tp_allocator())
2275 this->_M_assign_aux(std::make_move_iterator(__x.begin()),
2276 std::make_move_iterator(__x.end()),
2277 std::random_access_iterator_tag());
2283 template<
typename _Up>
2284 _GLIBCXX20_CONSTEXPR
2286 _M_data_ptr(_Up* __ptr)
const _GLIBCXX_NOEXCEPT
2289#if __cplusplus >= 201103L
2290 template<
typename _Ptr>
2291 _GLIBCXX20_CONSTEXPR
2292 typename std::pointer_traits<_Ptr>::element_type*
2293 _M_data_ptr(_Ptr __ptr)
const
2294 {
return empty() ? nullptr : std::__to_address(__ptr); }
2296 template<
typename _Ptr>
2298 _M_data_ptr(_Ptr __ptr)
const
2299 {
return empty() ? (value_type*)0 : __ptr.operator->(); }
2303#if __cpp_deduction_guides >= 201606
2304 template<
typename _InputIterator,
typename _ValT
2307 typename = _RequireInputIter<_InputIterator>,
2308 typename = _RequireAllocator<_Allocator>>
2309 vector(_InputIterator, _InputIterator, _Allocator = _Allocator())
2312#if __glibcxx_containers_ranges
2313 template<ranges::input_range _Rg,
2315 vector(from_range_t, _Rg&&, _Alloc = _Alloc())
2330 template<
typename _Tp,
typename _Alloc>
2331 _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR
2337#if __cpp_lib_three_way_comparison
2349 template<
typename _Tp,
typename _Alloc>
2351 constexpr __detail::__synth3way_t<_Tp>
2356 __detail::__synth3way);
2370 template<
typename _Tp,
typename _Alloc>
2371 _GLIBCXX_NODISCARD
inline bool
2372 operator<(
const vector<_Tp, _Alloc>& __x,
const vector<_Tp, _Alloc>& __y)
2373 {
return std::lexicographical_compare(__x.begin(), __x.end(),
2374 __y.begin(), __y.end()); }
2377 template<
typename _Tp,
typename _Alloc>
2378 _GLIBCXX_NODISCARD
inline bool
2380 {
return !(__x == __y); }
2383 template<
typename _Tp,
typename _Alloc>
2384 _GLIBCXX_NODISCARD
inline bool
2386 {
return __y < __x; }
2389 template<
typename _Tp,
typename _Alloc>
2390 _GLIBCXX_NODISCARD
inline bool
2392 {
return !(__y < __x); }
2395 template<
typename _Tp,
typename _Alloc>
2396 _GLIBCXX_NODISCARD
inline bool
2398 {
return !(__x < __y); }
2402 template<
typename _Tp,
typename _Alloc>
2403 _GLIBCXX20_CONSTEXPR
2406 _GLIBCXX_NOEXCEPT_IF(
noexcept(__x.swap(__y)))
2409_GLIBCXX_END_NAMESPACE_CONTAINER
2411#if __cplusplus >= 201703L
2412 namespace __detail::__variant
2414 template<
typename>
struct _Never_valueless_alt;
2418 template<
typename _Tp,
typename _Alloc>
2419 struct _Never_valueless_alt<_GLIBCXX_STD_C::vector<_Tp, _Alloc>>
2425_GLIBCXX_END_NAMESPACE_VERSION