diff --git a/include/continuable/detail/traverse-async.hpp b/include/continuable/detail/traverse-async.hpp index 88f0e40..71d58d3 100644 --- a/include/continuable/detail/traverse-async.hpp +++ b/include/continuable/detail/traverse-async.hpp @@ -530,22 +530,23 @@ auto apply_pack_transform_async(Visitor&& visitor, Args&&... args) { // Provide the frame and visitor type using types = async_traversal_types; + using frame_t = typename types::frame_t; + using visitor_t = typename types::visitor_t; // Check whether the visitor inherits enable_shared_from_this - static_assert( - std::is_base_of, - typename types::visitor_t>::value, - "The visitor must inherit std::enable_shared_from_this!"); + static_assert(std::is_base_of, + visitor_t>::value, + "The visitor must inherit std::enable_shared_from_this!"); // Check whether the visitor is virtual destructible - static_assert(std::has_virtual_destructor::value, + static_assert(std::has_virtual_destructor::value, "The visitor must have a virtual destructor!"); // Create the frame on the heap which stores the arguments // to traverse asynchronous. It persists until the // traversal frame isn't referenced anymore. - auto frame = std::make_shared(std::forward(visitor), - std::forward(args)...); + auto frame = std::make_shared(std::forward(visitor), + std::forward(args)...); // Create a static range for the top level tuple auto range = std::make_tuple(make_static_range(frame->head())); @@ -558,7 +559,7 @@ auto apply_pack_transform_async(Visitor&& visitor, Args&&... args) { // Cast the shared_ptr down to the given visitor type // for implementation invisibility - return std::static_pointer_cast(std::move(frame)); + return std::static_pointer_cast(std::move(frame)); } } // namespace traversal } // namespace detail