@@ -100,24 +100,24 @@ struct inplace_vector_destruct_base {
100100 // [containers.sequences.inplace.vector.cons], construct/copy/destroy
101101 constexpr inplace_vector_destruct_base () = default;
102102
103- inplace_vector_destruct_base (
103+ constexpr inplace_vector_destruct_base (
104104 const inplace_vector_destruct_base
105105 &other) noexcept (std::is_nothrow_copy_constructible_v<T>)
106106 : elems(), size_(other.size_) {}
107107
108- inplace_vector_destruct_base (
108+ constexpr inplace_vector_destruct_base (
109109 const inplace_vector_destruct_base
110110 &&other) noexcept (std::is_nothrow_move_constructible_v<T>)
111- : elems(), size_(other.size() ) {}
111+ : elems(), size_(other.size_ ) {}
112112
113- inplace_vector_destruct_base &
113+ constexpr inplace_vector_destruct_base &
114114 operator =(const inplace_vector_destruct_base &other) noexcept (
115115 std::is_nothrow_copy_constructible_v<T> &&
116116 std::is_nothrow_copy_assignable_v<T>) {
117117 size_ = other.size_ ;
118118 }
119119
120- inplace_vector_destruct_base &
120+ constexpr inplace_vector_destruct_base &
121121 operator =(const inplace_vector_destruct_base &&other) noexcept (
122122 std::is_nothrow_move_constructible_v<T> &&
123123 std::is_nothrow_move_assignable_v<T>) {
@@ -142,19 +142,18 @@ struct inplace_vector_base : public inplace_vector_destruct_base<T, Capacity> {
142142
143143 // [containers.sequences.inplace.vector.cons], construct/copy/destroy
144144 constexpr inplace_vector_base () = default;
145- inplace_vector_base (const inplace_vector_base &other) noexcept (
145+ constexpr inplace_vector_base (const inplace_vector_base &other) noexcept (
146146 std::is_nothrow_copy_constructible_v<T>)
147- : inplace_vector_destruct_base<T, Capacity>(other.size ) {
147+ : inplace_vector_destruct_base<T, Capacity>(other.size_ ) {
148148 std::copy (other.begin (), other.end (), begin ());
149149 }
150- inplace_vector_base (inplace_vector_base &&other) noexcept (
150+ constexpr inplace_vector_base (inplace_vector_base &&other) noexcept (
151151 Capacity == 0 || std::is_nothrow_move_constructible_v<T>)
152152 : inplace_vector_destruct_base<T, Capacity>(other.size_) {
153153 std::copy (other.begin (), other.end (), begin ());
154- std::destroy (other.begin (), other.end ());
155- other.size_ = 0 ;
156154 }
157- inplace_vector_base &operator =(const inplace_vector_base &other) noexcept (
155+ constexpr inplace_vector_base &
156+ operator =(const inplace_vector_base &other) noexcept (
158157 std::is_nothrow_copy_constructible_v<T> &&
159158 std::is_nothrow_copy_assignable_v<T>) {
160159 const auto diff = static_cast <std::ptrdiff_t >(other.size () - size ());
@@ -175,7 +174,8 @@ struct inplace_vector_base : public inplace_vector_destruct_base<T, Capacity> {
175174 return *this ;
176175 }
177176
178- inplace_vector_base &operator =(inplace_vector_base &&other) noexcept (
177+ constexpr inplace_vector_base &
178+ operator =(inplace_vector_base &&other) noexcept (
179179 Capacity == 0 || (std::is_nothrow_move_constructible_v<T> &&
180180 std::is_nothrow_move_assignable_v<T>)) {
181181 const auto diff = static_cast <std::ptrdiff_t >(other.size () - size ());
@@ -185,13 +185,10 @@ struct inplace_vector_base : public inplace_vector_destruct_base<T, Capacity> {
185185 std::destroy (new_end, end ());
186186 // other size is grater than size
187187 } else {
188- std::move (other, other .begin (), other.begin () + size (), begin ());
188+ std::move (other.begin (), other.begin () + size (), begin ());
189189 std::move (other.begin () + size (), other.end (), end ());
190190 }
191191 this ->size_ = other.size ();
192- std::destroy (other.begin (), other.end ());
193- // reset size to zero
194- other.change_size (-static_cast <std::ptrdiff_t >(other.size ()));
195192 return *this ;
196193 }
197194 constexpr inplace_vector_base (const size_type size)
0 commit comments