#include "di/function/index_dispatch.h"
#include "di/function/invoke.h"
#include "di/meta/algorithm.h"
#include "di/meta/constexpr.h"
#include "di/platform/compiler.h"
#include "di/vocab/array/array.h"
#include "di/vocab/md/prelude.h"
#include "di/vocab/variant/variant_like.h"
#include "di/vocab/variant/variant_value.h"
Go to the source code of this file.
Classes | |
struct | di::vocab::detail::VisitHelper< Idx, R, Vis, Vars > |
struct | di::vocab::detail::VisitHelper< meta::List< Constexpr< indices >... >, R, Vis, Vars... > |
Namespaces | |
namespace | di |
namespace | di::vocab |
namespace | di::vocab::detail |
Functions | |
template<typename R, typename Vis, concepts::VariantLike... Vars, typename Indices = meta::CartesianProduct<meta::AsList<meta::MakeIndexSequence<meta::VariantSize<Vars>>>...>> requires (requires { []<concepts::TypeList... Idx>(meta::List<Idx...>) { return Array { (&detail::VisitHelper<Idx, R, Vis, Vars...>::call)... }; }(Indices {}); }) | |
constexpr auto | di::vocab::visit (Vis &&visitor, Vars &&... variants) -> R |
template<typename Vis, concepts::VariantLike... Vars, typename R = decltype(function::invoke(util::declval<Vis>(), util::get<0>(util::declval<Vars>())...))> | |
constexpr auto | di::vocab::visit (Vis &&visitor, Vars &&... variants) -> decltype(auto) requires( |
template<typename R, typename Vis, concepts::VariantLike... Vars, typename Indices = meta::CartesianProduct<meta::AsList<meta::MakeIndexSequence<meta::VariantSize<Vars>>>...>> requires (requires { []<concepts::TypeList... Idx>(meta::List<Idx...>) { return Array { (&detail::VisitHelper<Idx, R, Vis, Vars...>::call)... }; }(Indices {}); }) | |
constexpr auto | di::visit (Vis &&visitor, Vars &&... variants) -> R |