64class alignas(alignof(T) > 8 ? alignof(T) : 8) static_vector
69 typedef const T& const_reference;
71 typedef const T* const_iterator;
72 typedef size_t size_type;
73 typedef std::ptrdiff_t difference_type;
76 typedef const T* const_pointer;
77 typedef std::reverse_iterator<iterator> reverse_iterator;
78 typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
81 explicit static_vector(size_type count);
82 static_vector(size_type count,
const value_type& value);
83 template <
typename InputIterator> static_vector(InputIterator first, InputIterator last);
84 static_vector(
const static_vector<T, maxsize>& other);
85 static_vector(static_vector<T, maxsize>&& other);
86 static_vector(std::initializer_list<value_type> init);
89 static_vector<T, maxsize>& operator=(
const static_vector<T, maxsize>& other);
90 static_vector<T, maxsize>& operator=(static_vector<T, maxsize>&& other);
92 void assign(size_type count,
const value_type& value);
93 template <
typename InputIterator>
void assign(InputIterator first, InputIterator last);
94 void assign(std::initializer_list<value_type> init);
96 iterator begin()
noexcept;
97 const_iterator begin()
const noexcept;
98 const_iterator cbegin()
const noexcept;
99 iterator end()
noexcept;
100 const_iterator end()
const noexcept;
101 const_iterator cend()
const noexcept;
102 reverse_iterator rbegin()
noexcept;
103 const_reverse_iterator rbegin()
const noexcept;
104 const_reverse_iterator crbegin()
const noexcept;
105 reverse_iterator rend()
noexcept;
106 const_reverse_iterator rend()
const noexcept;
107 const_reverse_iterator crend()
const noexcept;
109 size_type size()
const noexcept;
110 constexpr size_type max_size()
const noexcept;
111 void resize(size_type n,
const value_type& value = value_type());
112 constexpr size_type capacity()
const noexcept;
113 bool empty()
const noexcept;
114 void reserve(size_type n);
116 reference operator[](size_type i);
117 const_reference operator[](size_type i)
const;
118 reference at(size_type i);
119 const_reference at(size_type i)
const;
121 const_reference front()
const;
123 const_reference back()
const;
125 void push_back(
const value_type& value);
126 void push_back(value_type&& value);
127 template <
typename... Args> reference emplace_back(Args&&... args);
129 iterator insert(const_iterator position,
const value_type& value);
130 iterator insert(const_iterator position, value_type&& value);
131 iterator insert(const_iterator position, size_type n,
const value_type& value);
132 template <
typename InputIterator> iterator insert(const_iterator position, InputIterator first, InputIterator last);
133 iterator insert(const_iterator position, std::initializer_list<value_type> init);
134 template <
typename... Args> iterator emplace(const_iterator pos, Args&&... args);
135 iterator erase(iterator position);
136 iterator erase(iterator first, iterator last);
138 void swap(static_vector<T, maxsize>& other);
142 enum { max_size_ = maxsize };
144 pointer get_element(size_type i) {
return reinterpret_cast<pointer
>(data_) + i; }
145 const_pointer get_element(size_type i)
const {
return reinterpret_cast<const_pointer
>(data_) + i; }
146 template <
typename IntegerType> iterator insert(const_iterator position, IntegerType n, IntegerType value,
147 meta::Wrap<meta::True> parameter_is_integral);
148 template <
typename InputIterator> iterator insert(const_iterator position, InputIterator first,
149 InputIterator last, meta::Wrap<meta::False> parameter_is_iterator);
150 void assign(size_type count, value_type value, meta::Wrap<meta::True> );
151 template <
typename InputIterator>
void assign(InputIterator first, InputIterator last,
152 meta::Wrap<meta::False> );
153 void move_to_back(iterator first, iterator last, size_type step);
154 void move_to_front(iterator first, iterator last, size_type step);
155 void enforce_valid_size(size_type new_size)
const;
157 char data_[max_size_ *
sizeof(T)];