di 0.1.0
Loading...
Searching...
No Matches
get_cli_parser.h
Go to the documentation of this file.
1#pragma once
2
4#include "di/types/prelude.h"
5
6namespace di::cli {
7namespace detail {
8 struct GetCliParserInPlaceFunction {
9 template<typename T>
10 requires(concepts::TagInvocable<GetCliParserInPlaceFunction, InPlaceType<T>> ||
11 requires { T::get_cli_parser(); })
12 constexpr auto operator()(InPlaceType<T>) const {
13 if constexpr (concepts::TagInvocable<GetCliParserInPlaceFunction, InPlaceType<T>>) {
15 } else {
16 return T::get_cli_parser();
17 }
18 }
19 };
20}
21
22constexpr inline auto get_cli_parser_in_place = detail::GetCliParserInPlaceFunction {};
23
24namespace detail {
25 template<typename T>
26 struct GetCliParserFunction {
27 constexpr auto operator()() const { return get_cli_parser_in_place(in_place_type<T>); }
28 };
29}
30
31template<typename T>
32constexpr inline auto get_cli_parser = detail::GetCliParserFunction<T> {};
33}
34
35namespace di {
37}
Definition argument.h:11
constexpr auto get_cli_parser
Definition get_cli_parser.h:32
constexpr auto get_cli_parser_in_place
Definition get_cli_parser.h:22
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
Definition any_storable.h:9
constexpr auto in_place_type
Definition in_place_type.h:12