| 135 | // push_back() overload for lvalue references |
| 136 | template <typename T> |
| 137 | void Array<T>::push_back(T element) // Pass by value (copy of lvalue, or moved rvalue!) |
| 138 | { |
| 139 | Array<T> newArray{m_size + 1}; // Allocate a larger Array<> |
| 140 | for (size_t i {}; i < m_size; ++i) // Move existing elements (copy if not noexcept)... |
| 141 | newArray[i] = move_assign_if_noexcept(m_elements[i]); |
| 142 | |
| 143 | newArray[m_size] = move_assign_if_noexcept(element); // Move (or copy) the new one... |
| 144 | |
| 145 | swap(newArray); // ... and swap! |
| 146 | } |
| 147 | |
| 148 | #endif |