| 148 | // push_back() overload for lvalue references |
| 149 | template <typename T> |
| 150 | void Array<T>::push_back(T element) // Pass by value (copy of lvalue, or moved rvalue!) |
| 151 | { |
| 152 | Array<T> newArray{m_size + 1}; // Allocate a larger Array<> |
| 153 | for (size_t i {}; i < m_size; ++i) // Move existing elements (copy if not noexcept)... |
| 154 | newArray[i] = move_assign_if_noexcept(m_elements[i]); |
| 155 | |
| 156 | newArray[m_size] = move_assign_if_noexcept(element); // Move (or copy) the new one... |
| 157 | |
| 158 | swap(newArray); // ... and swap! |
| 159 | } |
| 160 | |
| 161 | #endif |