using construct_at instead of placement new: https://cppreference.net/cpp/memory/ranges/construct_at.html