diff --git a/include/continuable/detail/traverse.hpp b/include/continuable/detail/traverse.hpp index e0b58d4..59bfe9a 100644 --- a/include/continuable/detail/traverse.hpp +++ b/include/continuable/detail/traverse.hpp @@ -517,7 +517,7 @@ void remap( strategy_traverse_tag, T&& container, M&& mapper, typename std::enable_if>::value>::type* = nullptr) { - for (auto&& element : std::forward(container)) { + for (auto&& element : container_accessor_of(std::forward(container))) { std::forward(mapper)(std::forward(element)); } } diff --git a/test/unit-test/single/test-continuable-traverse.cpp b/test/unit-test/single/test-continuable-traverse.cpp index d741563..f7bc8d2 100644 --- a/test/unit-test/single/test-continuable-traverse.cpp +++ b/test/unit-test/single/test-continuable-traverse.cpp @@ -542,6 +542,22 @@ TEST(test_strategic_container_traverse, type_changed_move_only) { EXPECT_EQ(res[0], 5); } +TEST(test_strategic_container_traverse, traverse_move_only_wrapped) { + std::vector> container; + container.push_back(std::unique_ptr(new int(5))); + + std::size_t counter = 0; + traverse_pack( + [&counter](auto&& ptr) { + std::unique_ptr moved(std::forward(ptr)); + EXPECT_EQ((*moved), 5); + ++counter; + }, + std::make_tuple(std::move(container))); + + EXPECT_EQ(counter, 1U); +} + // Every element in the container is remapped // - Plain container TEST(test_strategic_container_traverse, every_element_remapped_plain) {