mirror of
https://github.com/Naios/continuable.git
synced 2025-12-06 16:56:44 +08:00
Fix a bug in the pack traversal where the container content wasn't perfectly forwarded
This commit is contained in:
parent
deb798118c
commit
c4cb102795
@ -517,7 +517,7 @@ void remap(
|
||||
strategy_traverse_tag, T&& container, M&& mapper,
|
||||
typename std::enable_if<is_effective_t<M, element_of_t<T>>::value>::type* =
|
||||
nullptr) {
|
||||
for (auto&& element : std::forward<T>(container)) {
|
||||
for (auto&& element : container_accessor_of(std::forward<T>(container))) {
|
||||
std::forward<M>(mapper)(std::forward<decltype(element)>(element));
|
||||
}
|
||||
}
|
||||
|
||||
@ -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<std::unique_ptr<int>> container;
|
||||
container.push_back(std::unique_ptr<int>(new int(5)));
|
||||
|
||||
std::size_t counter = 0;
|
||||
traverse_pack(
|
||||
[&counter](auto&& ptr) {
|
||||
std::unique_ptr<int> moved(std::forward<decltype(ptr)>(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) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user