| 122 | // push_back() overload for lvalue references |
| 123 | template <typename T> requires std::default_initializable<T> && std::destructible<T> |
| 124 | void Array<T>::push_back(T element) requires std::movable<T> |
| 125 | { |
| 126 | Array<T> newArray{m_size + 1}; // Allocate a larger Array<> |
| 127 | for (size_t i{}; i < m_size; ++i) // Move all existing elements... |
| 128 | newArray[i] = std::move(m_elements[i]); |
| 129 | |
| 130 | newArray[m_size] = std::move(element); // Move the new one (could itself be a copy already)... |
| 131 | |
| 132 | swap(newArray); // ... and swap! |
| 133 | } |
| 134 | |
| 135 | #endif |
no test coverage detected