34 template <
typename Visitor,
typename Variant >
35 decltype(
auto )
visit_index( Visitor&& vis, Variant const& var )
37 return impl::index_switch< 0, std::variant_size_v< std::decay_t< Variant > > >(
38 var.index(), std::forward< Visitor >( vis ) );
43 template <
typename Visitor,
typename Variant >
44 decltype(
auto )
visit( Visitor&& vis, Variant&& var )
47 [&vis, &var]< std::size_t i >() {
48 return vis( *std::get_if< i >( &var ) );
50 std::forward< Variant >( var ) );
56 template <
typename Visitor,
typename Variant >
60 [&vis]<
typename Item >( Item&& item ) -> decltype(
auto ) {
62 [&vis]<
typename... Vals >( Vals&&... vals ) -> decltype(
auto ) {
63 return vis( std::forward< Vals >( vals )... );
65 std::forward< Item >( item ) );
67 std::forward< Variant >( var ) );
MIT License.
Definition: impl.h:31
decltype(auto) visit_index(Visitor &&vis, Variant const &var)
Definition: visit.h:35
decltype(auto) visit(Visitor &&vis, Variant &&var)
Reimplementation of std::visit.
Definition: visit.h:44
decltype(auto) apply_on_visit(Visitor &&vis, Variant &&var)
Combines visit and std::apply into one step - provided variant is expanded with visit and apply is ca...
Definition: visit.h:57