Iros
 
Loading...
Searching...
No Matches
get_if.h
Go to the documentation of this file.
1#pragma once
2
3#include "di/meta/algorithm.h"
4#include "di/meta/language.h"
5#include "di/util/get.h"
10
11namespace di::vocab {
12template<size_t index, concepts::VariantLike Var, typename Res = meta::VariantValue<Var, index>>
13constexpr auto get_if(Var&& variant) -> Optional<meta::RemoveRValueReference<Res>> {
14 if (variant_index(variant) != index) {
15 return nullopt;
16 }
17 return util::get<index>(util::forward<Var>(variant));
18}
19
20template<typename T, concepts::VariantLike Var, typename List = meta::VariantTypes<Var>,
21 auto index = meta::Lookup<T, List>, typename Res = meta::VariantValue<Var, index>>
23constexpr auto get_if(Var&& variant) -> Optional<meta::RemoveRValueReference<Res>> {
24 if (variant_index(variant) != index) {
25 return nullopt;
26 }
27 return util::get<index>(util::forward<Var>(variant));
28}
29}
30
31namespace di {
32using vocab::get_if;
33}
Definition optional_forward_declaration.h:5
Definition list.h:116
constexpr auto get(T &&value) -> decltype(auto)
Definition get.h:8
Definition lazy.h:165
constexpr auto get_if(Var &&variant) -> Optional< meta::RemoveRValueReference< Res > >
Definition get_if.h:13
constexpr auto variant_index
Definition variant_index.h:27
constexpr auto nullopt
Definition nullopt.h:15
Definition zstring_parser.h:9