5 template <
typename ...T>
struct Visitor :
T... {
6 using T::operator()...;
9 using T::operator()...;
10 template<
typename Arg>
requires (!std::is_invocable_v<T, Arg&> && ...)
auto operator()(
Arg&) { };
17 template<
typename ...Args>
struct Variant :
public std::variant<Args...> {
18 using std::variant<
Args...>::variant;
22 template<
typename ...Visitors>
24 return std::visit(
Visitor{ std::forward<Visitors>(
visitors)... }, *
this);
26 template<
typename ...Visitors>
28 return std::visit(
Visitor{ std::forward<Visitors>(
visitors)... }, *
this);
31 template<
typename ...Visitors>
35 template<
typename ...Visitors>
43 return std::get<T>(*
this);
49 return std::get<T>(*
this);
55 return std::get_if<T>(
this);
61 return std::get_if<T>(
this);
Header-only convenience utilities.
Definition Chrono.hpp:3
std::unique_ptr< T, StlDeleter< T > > UniquePtr
std::unique_ptr with custom deleter that uses a Foundation::Core::Allocator to deallocate memory.
Definition Allocator.hpp:161
Extended std::variant with C++23 visit() behavior and convenience Get()/GetIf() methods.
Definition Functional.hpp:17
auto Visit(Visitors &&... visitors)
Definition Functional.hpp:23
auto VisitDefault(Visitors &&... visitors)
Definition Functional.hpp:32
constexpr const T & Get() const
Definition Functional.hpp:48
constexpr T & Get()
Definition Functional.hpp:42
auto VisitDefault(Visitors &&... visitors) const
Definition Functional.hpp:36
constexpr const T * GetIf() const
Definition Functional.hpp:60
auto Visit(Visitors &&... visitors) const
Definition Functional.hpp:27
constexpr T * GetIf()
Definition Functional.hpp:54