diff --git a/include/continuable/detail/core/base.hpp b/include/continuable/detail/core/base.hpp index 8e713bb..8822f7c 100644 --- a/include/continuable/detail/core/base.hpp +++ b/include/continuable/detail/core/base.hpp @@ -363,6 +363,12 @@ auto exception_invoker_of(traits::identity> id) noexcept { return invoker_of(id); } +template +auto exception_invoker_of( + traits::identity> id) { + return invoker_of(id); +} + #undef CONTINUABLE_BLOCK_TRY_BEGIN #undef CONTINUABLE_BLOCK_TRY_END } // namespace decoration diff --git a/test/unit-test/multi/test-continuable-base-multipath.cpp b/test/unit-test/multi/test-continuable-base-multipath.cpp index df098d3..2687b7a 100644 --- a/test/unit-test/multi/test-continuable-base-multipath.cpp +++ b/test/unit-test/multi/test-continuable-base-multipath.cpp @@ -131,6 +131,31 @@ TYPED_TEST(single_dimension_tests, multipath_exception_is_cancelable) { })); } +TYPED_TEST(single_dimension_tests, multipath_exception_is_continuable) { + ASSERT_ASYNC_RESULT( + this->supply_exception(supply_test_exception(), identity<>{}) + .fail([&](exception_t) { + // + return this->supply(); + })); + + ASSERT_ASYNC_RESULT( + this->supply_exception(supply_test_exception(), identity{}) + .fail([&](exception_t) { + // + return this->supply(CANARY); + }), + CANARY); + + ASSERT_ASYNC_RESULT( + this->supply_exception(supply_test_exception(), identity{}) + .fail([&](exception_t) { + // + return this->supply(1, CANARY, 2); + }), + 1, CANARY, 2); +} + TYPED_TEST(single_dimension_tests, multipath_exception_is_autocanceled) { bool caught = false; ASSERT_ASYNC_INCOMPLETION(