145 using Ret_t = std::conditional_t<
146 std::is_same_v<R, DetectRetType>,
147 std::common_type<RetType_t<Fs>...>,
148 std::type_identity<R>
150 return [&]<
typename Head,
typename... Rest> (
this auto self,
Head&& head, Rest&&... rest) -> Ret_t
152 if constexpr (!
sizeof... (Rest))
153 return std::forward<Head> (head) ();
156 using HeadArg = std::decay_t<ArgType_t<Head, 0>>;
157 if (
const auto val = get_if<HeadArg> (&variant))
158 return std::forward<Head> (head) (*val);
159 return self (std::forward<Rest> (rest)...);
161 } (std::forward<Fs> (handlers)...);