opynsim
Unofficial C++ Documentation
Loading...
Searching...
No Matches
liboscar
utilities
std_variant_helpers.h
Go to the documentation of this file.
1
#pragma once
2
3
#include <cstddef>
4
#include <type_traits>
5
#include <variant>
6
7
namespace
osc
8
{
9
namespace
detail
10
{
11
// returns the index of the given variant type (impl)
12
template
<
typename
Variant,
typename
T,
size_t
I = 0>
13
[[nodiscard]]
constexpr
size_t
variant_index_impl
()
14
{
15
if
constexpr
(
I
>= std::variant_size_v<Variant>) {
16
return
std::variant_size_v<Variant>;
17
}
18
else
if
constexpr
(std::is_same_v<std::variant_alternative_t<I, Variant>,
T
>) {
19
return
I
;
20
}
21
else
{
22
return
variant_index_impl<Variant, T, I + 1>();
23
}
24
}
25
}
26
27
// returns the index of the given variant type
28
template
<
typename
Variant,
typename
T>
29
[[nodiscard]]
constexpr
size_t
variant_index
()
30
{
31
return
detail::variant_index_impl<Variant, T>();
32
}
33
34
template
<
typename
... Ts>
35
struct
Overload
: Ts... {
36
using
Ts::operator()...;
37
};
38
template
<
typename
... Ts>
Overload
(Ts...) ->
Overload
<Ts...>;
39
}
osc::detail::variant_index_impl
constexpr size_t variant_index_impl()
Definition
std_variant_helpers.h:13
osc
Definition
custom_decoration_generator.h:5
osc::Key::T
@ T
osc::Key::I
@ I
osc::variant_index
constexpr size_t variant_index()
Definition
std_variant_helpers.h:29
osc::Overload
Definition
std_variant_helpers.h:35
Generated by
1.9.8