Skip to content

Commit

Permalink
fix: Visitor with rvalue arguments
Browse files Browse the repository at this point in the history
sdkrystian committed Dec 15, 2023

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
1 parent 01403d6 commit 8dbacbf
Showing 1 changed file with 12 additions and 17 deletions.
29 changes: 12 additions & 17 deletions include/mrdocs/Support/Visitor.hpp
Original file line number Diff line number Diff line change
@@ -50,14 +50,6 @@ class Visitor
Fn&& fn_;
std::tuple<Args&&...> args_;

template <class Derived>
decltype(auto)
getAs()
{
return static_cast<add_cvref_from_t<
Base, Derived>&&>(obj_);
}

public:
/** Constructor
@@ -82,16 +74,18 @@ class Visitor
@tparam Derived The derived type to visit
@return The result of calling the function object
*/
template <std::derived_from<std::remove_cvref_t<Base>> Derived>
template<std::derived_from<
std::remove_cvref_t<Base>> Derived>
decltype(auto)
visit()
{
return std::apply(
std::forward<Fn>(fn_),
std::tuple_cat(
std::forward_as_tuple(
getAs<Derived>()),
args_));
static_cast<add_cvref_from_t<
Base, Derived>&&>(obj_)),
std::move(args_)));
}
};

@@ -108,10 +102,10 @@ class Visitor
*/
template<
class BaseTy,
class ObjectTy,
class FnTy,
class... ArgsTy>
typename BaseTy,
typename ObjectTy,
typename FnTy,
typename... ArgsTy>
auto
makeVisitor(
ObjectTy&& obj,
@@ -120,8 +114,9 @@ makeVisitor(
{
using VisitorTy = Visitor<
add_cvref_from_t<ObjectTy, BaseTy>,
FnTy&&, ArgsTy&&...>;
return VisitorTy(std::forward<ObjectTy>(obj),
FnTy, ArgsTy...>;
return VisitorTy(
std::forward<ObjectTy>(obj),
std::forward<FnTy>(fn),
std::forward<ArgsTy>(args)...);
}

0 comments on commit 8dbacbf

Please sign in to comment.