diff --git a/include/continuable/detail/traits.hpp b/include/continuable/detail/traits.hpp index fb12337..7ff9d37 100644 --- a/include/continuable/detail/traits.hpp +++ b/include/continuable/detail/traits.hpp @@ -461,11 +461,11 @@ using std::disjunction; namespace detail { /// Declares a C++14 polyfill for C++17 std::disjunction. template > -struct disjunction_impl : std::common_type {}; +struct disjunction_impl : std::common_type {}; template struct disjunction_impl, - void_t...>> - : std::common_type {}; + void_t...>> + : std::common_type {}; } // namespace detail template diff --git a/test/unit-test/single/test-continuable-traverse.cpp b/test/unit-test/single/test-continuable-traverse.cpp index 2382998..bbe3c64 100644 --- a/test/unit-test/single/test-continuable-traverse.cpp +++ b/test/unit-test/single/test-continuable-traverse.cpp @@ -770,3 +770,31 @@ TEST(traversal_prio, prioritize_mapping) { EXPECT_EQ(res, 4); } + +struct flat_tupelizing_tag1 {}; +struct flat_tupelizing_tag2 {}; + +struct flat_tupelizing_mapper { + auto operator()(flat_tupelizing_tag1) { + return 7; + } + auto operator()(flat_tupelizing_tag2) { + return spread_this(); + } +}; + +TEST(traversal_regressions, flat_tupelizing) { + { + std::tuple result = + map_pack(flat_tupelizing_mapper{}, flat_tupelizing_tag1{}, + flat_tupelizing_tag2{}); + EXPECT_EQ(std::get<0>(result), 7); + } + + { + std::tuple result = map_pack( + flat_tupelizing_mapper{}, + std::make_tuple(flat_tupelizing_tag1{}, flat_tupelizing_tag2{})); + EXPECT_EQ(std::get<0>(result), 7); + } +}