opynsim
Unofficial C++ Documentation
Loading...
Searching...
No Matches
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
7namespace 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 {
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}
constexpr size_t variant_index_impl()
Definition std_variant_helpers.h:13
Definition custom_decoration_generator.h:5
constexpr U to(T &&value)
Definition conversion.h:56
constexpr size_t variant_index()
Definition std_variant_helpers.h:29
Definition std_variant_helpers.h:35