Iros
 
Loading...
Searching...
No Matches
variant_index.h
Go to the documentation of this file.
1#pragma once
2
4#include "di/meta/core.h"
5#include "di/types/prelude.h"
6
7namespace di::vocab {
8namespace detail {
9 template<typename T>
10 concept MemberVariantIndex = requires(T const& variant) {
11 { variant.index() } -> concepts::SameAs<size_t>;
12 };
13
15 template<typename T>
17 constexpr auto operator()(T const& variant) const -> size_t {
19 return function::tag_invoke(*this, variant);
20 } else {
21 return variant.index();
22 }
23 }
24 };
25}
26
28}
Definition core.h:114
Definition tag_invoke.h:45
Definition variant_index.h:10
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
Definition erasure_cast.h:7
Definition lazy.h:165
constexpr auto variant_index
Definition variant_index.h:27
Definition variant_index.h:14