3#ifndef TETL_VECTOR_STATIC_VECTOR_HPP
4#define TETL_VECTOR_STATIC_VECTOR_HPP
45struct static_vector_zero_storage {
50 using const_pointer = T
const*;
53 constexpr static_vector_zero_storage() =
default;
56 constexpr static_vector_zero_storage(static_vector_zero_storage
const&) =
default;
59 constexpr auto operator=(static_vector_zero_storage
const&)
noexcept -> static_vector_zero_storage& =
default;
62 constexpr static_vector_zero_storage(static_vector_zero_storage&&) noexcept = default;
65 constexpr auto operator=(static_vector_zero_storage&&) noexcept -> static_vector_zero_storage& = default;
68 ~static_vector_zero_storage() = default;
71 [[nodiscard]] static constexpr auto data() noexcept -> pointer {
return nullptr; }
74 [[nodiscard]]
static constexpr auto size() noexcept -> size_type {
return 0; }
77 [[nodiscard]]
static constexpr auto capacity() noexcept -> size_type {
return 0; }
80 [[nodiscard]]
static constexpr auto empty() noexcept ->
bool {
return true; }
83 [[nodiscard]]
static constexpr auto full() noexcept ->
bool {
return true; }
88 template <
typename... Args>
90 static constexpr auto emplace_back(Args&&... ) noexcept ->
void
103 static constexpr void unsafe_set_size([[maybe_unused]]
size_t newSize)
noexcept {
TETL_PRECONDITION(newSize == 0); }
108 template <
typename InputIt>
109 static constexpr auto unsafe_destroy(InputIt , InputIt )
noexcept ->
void
115 static constexpr void unsafe_destroy_all() noexcept { }
119template <
typename T,
size_t Capacity>
120struct static_vector_trivial_storage {
122 static_assert(Capacity !=
size_t{0});
125 using value_type = T;
128 using const_pointer = T
const*;
130 constexpr static_vector_trivial_storage() noexcept = default;
132 constexpr static_vector_trivial_storage(static_vector_trivial_storage const&) noexcept = default;
133 constexpr auto operator=(static_vector_trivial_storage const&) noexcept -> static_vector_trivial_storage& = default;
135 constexpr static_vector_trivial_storage(static_vector_trivial_storage&&) noexcept = default;
136 constexpr auto operator=(static_vector_trivial_storage&&) noexcept -> static_vector_trivial_storage& = default;
138 ~static_vector_trivial_storage() = default;
141 [[nodiscard]] constexpr auto data() const noexcept -> const_pointer {
return _data.data(); }
144 [[nodiscard]]
constexpr auto data() noexcept -> pointer {
return _data.data(); }
147 [[nodiscard]]
constexpr auto size() const noexcept -> size_type {
return _size; }
151 [[nodiscard]]
constexpr auto capacity() const noexcept -> size_type {
return Capacity; }
154 [[nodiscard]]
constexpr auto empty() const noexcept ->
bool {
return size() == size_type{0}; }
157 [[nodiscard]]
constexpr auto full() const noexcept ->
bool {
return size() == Capacity; }
160 template <
typename... Args>
162 constexpr auto emplace_back(Args&&... args)
noexcept ->
void
166 unsafe_set_size(
static_cast<size_type
>(size()) + 1U);
170 constexpr auto pop_back() noexcept ->
void
173 unsafe_set_size(
static_cast<size_type
>(size() - 1));
180 constexpr auto unsafe_set_size(
size_t newSize)
noexcept ->
void
183 _size = size_type(newSize);
189 template <
typename InputIt>
190 constexpr auto unsafe_destroy(InputIt , InputIt )
noexcept ->
void
197 constexpr auto unsafe_destroy_all() noexcept ->
void { }
203 alignas(
alignof(T)) data_t _data{};
209template <
typename T,
size_t Capacity>
210struct static_vector_non_trivial_storage {
212 static_assert(Capacity !=
size_t{0});
215 using value_type = T;
218 using const_pointer = T
const*;
220 static_vector_non_trivial_storage() =
default;
222 static_vector_non_trivial_storage(static_vector_non_trivial_storage
const&) =
default;
223 auto operator=(static_vector_non_trivial_storage
const&) -> static_vector_non_trivial_storage& =
default;
225 static_vector_non_trivial_storage(static_vector_non_trivial_storage&&) noexcept = default;
226 auto operator=(static_vector_non_trivial_storage&&) noexcept -> static_vector_non_trivial_storage& = default;
231 [[nodiscard]]
auto data() const noexcept -> const_pointer {
return reinterpret_cast<const_pointer
>(_data); }
234 [[nodiscard]]
auto data() noexcept -> pointer {
return reinterpret_cast<pointer
>(_data); }
237 [[nodiscard]]
auto end() const noexcept -> const_pointer {
return data() + size(); }
240 [[nodiscard]]
auto end() noexcept -> pointer {
return data() + size(); }
243 [[nodiscard]]
auto size() const noexcept -> size_type {
return _size; }
247 [[nodiscard]]
auto capacity() const noexcept -> size_type {
return Capacity; }
250 [[nodiscard]]
auto empty() const noexcept ->
bool {
return size() == size_type{0}; }
253 [[nodiscard]]
auto full() const noexcept ->
bool {
return size() == Capacity; }
257 template <
typename... Args>
258 auto emplace_back(Args&&... args)
noexcept(
noexcept(
new(end()) T(
etl::forward<Args>(args)...))) ->
void
262 unsafe_set_size(
static_cast<size_type
>(size() + 1));
269 auto* ptr = end() - 1;
271 unsafe_set_size(
static_cast<size_type
>(size() - 1));
278 auto unsafe_set_size(
size_t newSize)
noexcept ->
void
281 _size = size_type(newSize);
287 template <
typename InputIt>
292 for (; first != last; ++first) {
307 alignas(
alignof(T)) storage_type _data[Capacity];
312template <
typename T,
size_t Capacity>
315 static_vector_zero_storage<T>,
318 static_vector_trivial_storage<T, Capacity>,
319 static_vector_non_trivial_storage<T, Capacity>>>;
328template <
typename T,
size_t Capacity>
332 using base_type = detail::static_vector_storage_type<T, Capacity>;
335 using base_type::unsafe_destroy;
336 using base_type::unsafe_destroy_all;
337 using base_type::unsafe_set_size;
364 constexpr auto emplace_n(
size_type n)
noexcept(
370 while (n !=
size()) {
416 using base_type::emplace_back;
418 using base_type::pop_back;
421 template <
typename U>
429 template <
typename InIt>
430 requires(detail::InputIterator<InIt>)
434 assert_iterator_in_range(position);
435 assert_valid_iterator_pair(first, last);
436 if constexpr (detail::RandomAccessIterator<InIt>) {
442 for (; first != last; ++first) {
445 auto* writablePosition =
begin() + (position -
begin());
447 return writablePosition;
450 template <
typename... Args>
456 assert_iterator_in_range(position);
462 using base_type::data;
469 assert_iterator_in_range(position);
476 assert_iterator_in_range(position);
484 auto* writablePosition =
begin() + (position -
begin());
486 return writablePosition;
494 assert_iterator_in_range(position);
498 template <
typename InputIt>
499 constexpr auto insert(
const_iterator position, InputIt first, InputIt last)
noexcept(
noexcept(emplace_back(*first)))
503 assert_iterator_in_range(position);
504 assert_valid_iterator_pair(first, last);
505 if constexpr (detail::RandomAccessIterator<InputIt>) {
511 for (; first != last; ++first) {
512 emplace_back(*first);
515 auto* writablePosition =
begin() + (position -
begin());
517 return writablePosition;
523 unsafe_destroy_all();
529 template <etl::same_as<empty_c_array> Source = empty_c_array>
534 template <etl::
size_t Size>
535 requires(Size <= Capacity)
559 noexcept(
noexcept(
clear()) &&
noexcept(
insert(
begin(), other.begin(), other.end())))
596 template <
typename InputIter>
597 requires(detail::InputIterator<InputIter>)
600 if constexpr (detail::RandomAccessIterator<InputIter>) {
608 using base_type::empty;
610 using base_type::full;
613 [[nodiscard]]
constexpr auto size() const noexcept ->
size_type {
return base_type::size(); }
616 [[nodiscard]]
constexpr auto capacity() const noexcept ->
size_type {
return base_type::capacity(); }
621 template <
typename InputIter>
622 requires(detail::InputIterator<InputIter>)
623 constexpr auto assign(InputIter first, InputIter last)
624 noexcept(
noexcept(
clear()) and
noexcept(
insert(
begin(), first, last))) ->
void
626 if constexpr (detail::RandomAccessIterator<InputIter>) {
648 return detail::index(*
this, pos);
652 [[nodiscard]]
constexpr auto front() noexcept ->
reference {
return detail::index(*
this, 0); }
660 return detail::index(*
this,
static_cast<size_type>(
size() - 1));
666 return detail::index(*
this,
static_cast<size_type>(
size() - 1));
671 requires(detail::is_movable_v<value_type>)
673 assert_iterator_in_range(position);
674 return erase(position, position + 1);
678 requires(detail::is_movable_v<value_type>)
680 assert_iterator_pair_in_range(first, last);
684 unsafe_set_size(
size() -
static_cast<size_type>(last - first));
705 requires(detail::is_movable_v<value_type>)
734 template <
typename It>
735 constexpr void assert_iterator_in_range([[maybe_unused]] It it)
noexcept
742 template <
typename It0,
typename It1>
743 constexpr void assert_valid_iterator_pair([[maybe_unused]] It0 first, [[maybe_unused]] It1 last)
noexcept
750 template <
typename It0,
typename It1>
751 constexpr void assert_iterator_pair_in_range([[maybe_unused]] It0 first, [[maybe_unused]] It1 last)
noexcept
753 assert_iterator_in_range(first);
754 assert_iterator_in_range(last);
755 assert_valid_iterator_pair(first, last);
761template <
typename T,
size_t Capacity>
772template <
typename T,
size_t Capacity>
782template <
typename T,
size_t Capacity>
785 return !(lhs == rhs);
793template <
typename T,
size_t Capacity>
799template <
typename T,
size_t Capacity>
805template <
typename T,
size_t Capacity>
811template <
typename T,
size_t Capacity>
822template <
typename T,
size_t Capacity,
typename Predicate>
825 auto* it =
remove_if(c.begin(), c.end(), pred);
827 c.erase(it, c.end());
831template <
typename T,
size_t Capacity,
typename U>
834 return erase_if(c, [&value](
auto const& item) {
return item == value; });
#define TETL_PRECONDITION(...)
Definition check.hpp:16
constexpr auto remove_if(ForwardIt first, ForwardIt last, Predicate pred) -> ForwardIt
Removes all elements satisfying specific criteria from the range [first, last) and returns a past-the...
Definition remove_if.hpp:16
constexpr auto move(InputIt first, InputIt last, OutputIt destination) -> OutputIt
Moves the elements in the range [first, last), to another range beginning at destination,...
Definition move.hpp:26
constexpr auto rotate(ForwardIt first, ForwardIt nFirst, ForwardIt last) -> ForwardIt
Performs a left rotation on a range of elements.
Definition rotate.hpp:17
constexpr auto lexicographical_compare(InputIt1 f1, InputIt1 l1, InputIt2 f2, InputIt2 l2, Compare comp) -> bool
Checks if the first range [f1, l1) is lexicographically less than the second range [f2,...
Definition lexicographical_compare.hpp:17
constexpr auto equal(InputIt1 first1, InputIt1 last1, InputIt2 first2, Predicate p) -> bool
Returns true if the range [first1, last1) is equal to the range [first2, first2 + (last1 - first1)),...
Definition equal.hpp:18
ValueType[Size] c_array
Definition c_array.hpp:12
constexpr auto empty(C const &c) noexcept(noexcept(c.empty())) -> decltype(c.empty())
Returns whether the given container is empty.
Definition empty.hpp:15
constexpr auto end(C &c) -> decltype(c.end())
Returns an iterator to the end (i.e. the element after the last element) of the given container c or ...
Definition end.hpp:14
constexpr auto full(C const &c) noexcept(noexcept(c.full())) -> decltype(c.full())
Returns whether the given container is full.
Definition full.hpp:14
constexpr auto distance(It first, It last) -> typename iterator_traits< It >::difference_type
Returns the number of hops from first to last.
Definition distance.hpp:16
constexpr auto data(C &c) noexcept(noexcept(c.data())) -> decltype(c.data())
Returns a pointer to the block of memory containing the elements of the container.
Definition data.hpp:11
constexpr auto size(C const &c) noexcept(noexcept(c.size())) -> decltype(c.size())
Returns the size of the given container c or array array. Returns c.size(), converted to the return t...
Definition size.hpp:18
constexpr auto begin(C &c) -> decltype(c.begin())
Returns an iterator to the beginning of the given container c or array array. These templates rely on...
Definition begin.hpp:20
conditional_t<(N< static_cast< unsigned char >(-1)), unsigned char, conditional_t<(N< static_cast< unsigned short >(-1)), unsigned short, conditional_t<(N< static_cast< unsigned int >(-1)), unsigned int, conditional_t<(N< static_cast< unsigned long >(-1)), unsigned long, unsigned long long > > > > smallest_size_t
Smallest unsigned integer type that can represent values in the range [0, N].
Definition smallest_size_t.hpp:13
Definition adjacent_find.hpp:8
constexpr bool is_copy_constructible_v
Definition is_copy_constructible.hpp:30
constexpr auto operator==(inplace_function< R(Args...), Capacity, Alignment > const &f, nullptr_t) noexcept -> bool
Compares a etl::inplace_function with a null pointer. Empty functions (that is, functions without a c...
Definition inplace_function.hpp:262
typename conditional< B, T, F >::type conditional_t
Definition conditional.hpp:21
constexpr bool is_constructible_v
Definition is_constructible.hpp:24
constexpr bool is_nothrow_copy_constructible_v
Definition is_nothrow_copy_constructible.hpp:27
auto declval() noexcept -> add_rvalue_reference_t< T >
constexpr bool is_trivial_v
Definition is_trivial.hpp:22
constexpr bool is_nothrow_move_constructible_v
Definition is_nothrow_move_constructible.hpp:20
constexpr auto operator!=(inplace_function< R(Args...), Capacity, Alignment > const &f, nullptr_t) noexcept -> bool
Compares a etl::inplace_function with a null pointer. Empty functions (that is, functions without a c...
Definition inplace_function.hpp:272
constexpr bool is_move_constructible_v
Definition is_move_constructible.hpp:20
constexpr bool is_pointer_v
Definition is_pointer.hpp:30
TETL_BUILTIN_UINT8 uint8_t
Unsigned integer type with width of exactly 8 bits.
Definition uint_t.hpp:11
typename remove_const< T >::type remove_const_t
Definition remove_const.hpp:23
constexpr bool is_assignable_v
Definition is_assignable.hpp:20
constexpr auto operator<(etl::reverse_iterator< Iter1 > const &lhs, etl::reverse_iterator< Iter2 > const &rhs) -> bool
Compares the underlying iterators. Inverse comparisons are applied in order to take into account that...
Definition reverse_iterator.hpp:167
constexpr auto erase(basic_inplace_string< Char, Capacity, Traits > &c, U const &value) noexcept -> typename basic_inplace_string< Char, Capacity, Traits >::size_type
Erases all elements that compare equal to value from the container.
Definition basic_inplace_string.hpp:1635
TETL_BUILTIN_PTRDIFF ptrdiff_t
etl::ptrdiff_t is the signed integer type of the result of subtracting two pointers.
Definition ptrdiff_t.hpp:14
constexpr auto operator<=(etl::reverse_iterator< Iter1 > const &lhs, etl::reverse_iterator< Iter2 > const &rhs) -> bool
Compares the underlying iterators. Inverse comparisons are applied in order to take into account that...
Definition reverse_iterator.hpp:177
auto swap(inplace_function< R(Args...), Capacity, Alignment > &lhs, inplace_function< R(Args...), Capacity, Alignment > &rhs) noexcept -> void
Overloads the etl::swap algorithm for etl::inplace_function. Exchanges the state of lhs with that of ...
Definition inplace_function.hpp:249
constexpr auto operator>(etl::reverse_iterator< Iter1 > const &lhs, etl::reverse_iterator< Iter2 > const &rhs) -> bool
Compares the underlying iterators. Inverse comparisons are applied in order to take into account that...
Definition reverse_iterator.hpp:185
constexpr auto erase_if(etl::flat_set< Key, Container, Compare > &c, Pred pred) -> typename etl::flat_set< Key, Container, Compare >::size_type
Definition flat_set.hpp:385
constexpr auto operator>=(etl::reverse_iterator< Iter1 > const &lhs, etl::reverse_iterator< Iter2 > const &rhs) -> bool
Compares the underlying iterators. Inverse comparisons are applied in order to take into account that...
Definition reverse_iterator.hpp:195
constexpr bool is_nothrow_destructible_v
Definition is_nothrow_destructible.hpp:37
typename aligned_storage< Len, Align >::type aligned_storage_t
Definition aligned_storage.hpp:57
constexpr auto forward(remove_reference_t< T > ¶m) noexcept -> T &&
Forwards lvalues as either lvalues or as rvalues, depending on T. When t is a forwarding reference (a...
Definition forward.hpp:18
TETL_BUILTIN_SIZET size_t
etl::size_t is the unsigned integer type of the result of the sizeof operator.
Definition size_t.hpp:14
constexpr bool is_nothrow_swappable_v
Definition is_nothrow_swappable.hpp:19
array(T, U...) -> array< T, 1+sizeof...(U)>
One deduction guide is provided for array to provide an equivalent of experimental::make_array for co...
Function object for performing comparisons. Unless specialised, invokes operator== on type T....
Definition equal_to.hpp:14
reverse_iterator is an iterator adaptor that reverses the direction of a given iterator....
Definition reverse_iterator.hpp:22
Dynamically-resizable fixed-capacity vector.
Definition static_vector.hpp:329
typename base_type::pointer pointer
Definition static_vector.hpp:349
constexpr auto assign(InputIter first, InputIter last) noexcept(noexcept(clear()) and noexcept(insert(begin(), first, last))) -> void
assign
Definition static_vector.hpp:623
constexpr auto insert(const_iterator position, const_reference x) noexcept(noexcept(insert(position, size_type(1), x))) -> iterator requires(is_copy_constructible_v< T >)
Definition static_vector.hpp:489
constexpr auto operator[](size_type pos) const noexcept -> const_reference
Unchecked access to element at index pos (UB if index not in.
Definition static_vector.hpp:646
constexpr static_vector(InputIter first, InputIter last)
Initialize vector from range [first, last).
Definition static_vector.hpp:598
constexpr auto emplace(const_iterator position, Args &&... args) noexcept(noexcept(move_insert(position, declval< value_type * >(), declval< value_type * >()))) -> iterator
Definition static_vector.hpp:452
constexpr auto front() const noexcept -> const_reference
Definition static_vector.hpp:654
constexpr auto operator=(static_vector const &other) noexcept(noexcept(clear()) &&noexcept(insert(begin(), other.begin(), other.end()))) -> static_vector &requires(is_assignable_v< reference, const_reference >)
Copy assignment.
Definition static_vector.hpp:558
constexpr static_vector()=default
constexpr auto operator=(static_vector &&other) noexcept(noexcept(clear()) and noexcept(move_insert(begin(), other.begin(), other.end()))) -> static_vector &requires(is_assignable_v< reference, reference >)
Move assignment.
Definition static_vector.hpp:569
constexpr static_vector(static_vector &&other) noexcept(noexcept(move_insert(begin(), other.begin(), other.end())))
Move constructor.
Definition static_vector.hpp:550
constexpr auto crbegin() const noexcept -> const_reverse_iterator
Definition static_vector.hpp:406
constexpr auto move_insert(const_iterator position, InIt first, InIt last) noexcept(noexcept(emplace_back(etl::move(*first)))) -> iterator
Definition static_vector.hpp:431
etl::reverse_iterator< const_iterator > const_reverse_iterator
Definition static_vector.hpp:361
constexpr auto insert(const_iterator position, size_type n, T const &x) noexcept(noexcept(push_back(x))) -> iterator requires(is_copy_constructible_v< T >)
Definition static_vector.hpp:473
value_type const & const_reference
Definition static_vector.hpp:347
constexpr auto rbegin() const noexcept -> const_reverse_iterator
Definition static_vector.hpp:386
constexpr auto swap(static_vector &other) noexcept(is_nothrow_swappable_v< T >) -> void requires(is_assignable_v< T &, T && >)
Exchanges the contents of the container with those of other.
Definition static_vector.hpp:691
constexpr auto cend() noexcept -> const_iterator
Definition static_vector.hpp:402
constexpr auto back() noexcept -> reference
back
Definition static_vector.hpp:657
constexpr auto insert(const_iterator position, InputIt first, InputIt last) noexcept(noexcept(emplace_back(*first))) -> iterator requires(detail::InputIterator< InputIt > &&is_constructible_v< value_type, detail::iterator_reference_t< InputIt > >)
Definition static_vector.hpp:499
constexpr auto push_back(U &&value) noexcept(noexcept(emplace_back(etl::forward< U >(value)))) -> void
Appends value at the end of the vector.
Definition static_vector.hpp:423
constexpr auto rend() noexcept -> reverse_iterator
Definition static_vector.hpp:391
value_type & reference
Definition static_vector.hpp:345
constexpr auto begin() noexcept -> iterator
Definition static_vector.hpp:376
constexpr static_vector(Source) noexcept
Definition static_vector.hpp:530
constexpr auto end() noexcept -> iterator
Definition static_vector.hpp:380
constexpr auto begin() const noexcept -> const_iterator
Definition static_vector.hpp:378
constexpr auto cbegin() const noexcept -> const_iterator
Definition static_vector.hpp:400
constexpr auto resize(size_type sz, T const &value) noexcept(is_nothrow_copy_constructible_v< T >) -> void requires(is_copy_constructible_v< T >)
Definition static_vector.hpp:719
constexpr auto assign(size_type n, T const &u) -> void requires(is_copy_constructible_v< T >)
Definition static_vector.hpp:634
size_t size_type
Definition static_vector.hpp:357
typename base_type::pointer iterator
Definition static_vector.hpp:353
constexpr auto erase(const_iterator first, const_iterator last) noexcept -> iterator requires(detail::is_movable_v< value_type >)
Definition static_vector.hpp:677
constexpr auto operator[](size_type pos) noexcept -> reference
Unchecked access to element at index pos (UB if index not in.
Definition static_vector.hpp:643
constexpr void clear() noexcept
Clears the vector.
Definition static_vector.hpp:521
constexpr auto back() const noexcept -> const_reference
Definition static_vector.hpp:663
etl::reverse_iterator< iterator > reverse_iterator
Definition static_vector.hpp:359
constexpr auto front() noexcept -> reference
front
Definition static_vector.hpp:652
constexpr auto erase(const_iterator position) noexcept -> iterator requires(detail::is_movable_v< value_type >)
erase
Definition static_vector.hpp:670
constexpr auto max_size() const noexcept -> size_type
Definition static_vector.hpp:618
constexpr static_vector(size_type n, T const &value) noexcept(noexcept(insert(begin(), n, value)))
Initializes vector with n with value.
Definition static_vector.hpp:588
constexpr auto resize(size_type sz) noexcept((is_move_constructible_v< T > &&is_nothrow_move_constructible_v< T >)||(is_copy_constructible_v< T > &&is_nothrow_copy_constructible_v< T >)) -> void requires(detail::is_movable_v< value_type >)
Resizes the container to contain sz elements. If elements need to be appended, these are move-constru...
Definition static_vector.hpp:701
constexpr auto end() const noexcept -> const_iterator
Definition static_vector.hpp:382
typename base_type::const_pointer const_iterator
Definition static_vector.hpp:355
constexpr auto crend() const noexcept -> const_reverse_iterator
Definition static_vector.hpp:411
constexpr auto insert(const_iterator position, value_type &&x) noexcept(noexcept(move_insert(position, &x, &x+1))) -> iterator requires(is_move_constructible_v< T >)
Definition static_vector.hpp:464
constexpr static_vector(c_array< T, Size > &&source)
Definition static_vector.hpp:536
constexpr static_vector(static_vector const &other) noexcept(noexcept(insert(begin(), other.begin(), other.end())))
Copy constructor.
Definition static_vector.hpp:542
constexpr auto rend() const noexcept -> const_reverse_iterator
Definition static_vector.hpp:393
ptrdiff_t difference_type
Definition static_vector.hpp:343
constexpr auto size() const noexcept -> size_type
Number of elements in the vector.
Definition static_vector.hpp:613
constexpr auto cend() const noexcept -> const_iterator
Definition static_vector.hpp:404
constexpr auto capacity() const noexcept -> size_type
Maximum number of elements that can be allocated in the vector.
Definition static_vector.hpp:616
typename base_type::const_pointer const_pointer
Definition static_vector.hpp:351
constexpr static_vector(size_type n) noexcept(noexcept(emplace_n(n)))
Initializes vector with n default-constructed elements.
Definition static_vector.hpp:580
constexpr auto rbegin() noexcept -> reverse_iterator
Definition static_vector.hpp:384
typename base_type::value_type value_type
Definition static_vector.hpp:341
constexpr auto cbegin() noexcept -> const_iterator
Definition static_vector.hpp:398