25template<
typename Tag_,
typename T>
42 template<
typename... Args>
46 constexpr auto value() & -> T& {
return m_value; }
47 constexpr auto value() const& -> T const& {
return m_value; }
48 constexpr auto value() && -> T&& {
return di::move(m_value); }
49 constexpr auto value() const&& -> T const&& {
return di::move(m_value); }
72template<
typename... Args>
78 constexpr explicit NamedArguments(Args&&... args) : m_arguments(
di::forward<Args>(args)...) {}
83 constexpr auto arguments() const& ->
Tuple<Args&&...> const& {
return m_arguments; }
84 constexpr auto arguments() && ->
Tuple<Args&&...>&& {
return di::move(m_arguments); }
85 constexpr auto arguments() const&& ->
Tuple<Args&&...> const&& {
return di::move(m_arguments); }
88 Tuple<Args&&...> m_arguments;
91template<
typename... Args>
95 template<
typename Tag>
97 template<concepts::RemoveCVRefInstanceOf<NamedArguments> Args>
99 constexpr auto operator()(Args&& args)
const ->
decltype(
auto) {
100 constexpr auto index = meta::Lookup<Tag&&, meta::Type<meta::RemoveCVRef<Args>>>;
101 return di::get<index>(di::forward<Args>(args).arguments()).value();
125template<
typename Arg>
129 template<
typename Tag>
131 template<concepts::RemoveCVRefInstanceOf<NamedArguments> Args,
typename Val = meta::Type<Tag>,
132 concepts::ConvertibleTo<Val> U>
134 constexpr auto operator()(Args&& args, U&& fallback)
const -> Val {
138 return di::forward<U>(fallback);
143 template<
typename Tag>
146 template<concepts::RemoveCVRefInstanceOf<NamedArguments> Args,
typename U>
147 constexpr auto operator()(Args&& args, U&& fallback)
const ->
decltype(
auto) {
151 return di::forward<U>(fallback);
178template<
typename Arg>
192template<
typename Args,
typename Tag>
203template<
typename Args,
typename Tag>
216template<
typename Args,
typename Tag,
typename Fallback>
228template<
typename Args,
typename Tag,
typename Fallback>
241template<
typename Args,
typename Tag>
246 template<
typename List,
typename T>
260template<
typename Allowed,
typename... Args>
A helper class to simulate a single named argument.
Definition named_arguments.h:26
Tag_ Tag
Definition named_arguments.h:28
constexpr auto value() const &-> T const &
Definition named_arguments.h:47
T Type
Definition named_arguments.h:29
constexpr auto value() const &&-> T const &&
Definition named_arguments.h:49
constexpr auto value() &-> T &
Definition named_arguments.h:46
static constexpr bool is_named_argument
Definition named_arguments.h:31
constexpr NamedArgument(InPlace, Args &&... args)
Definition named_arguments.h:44
constexpr auto value() &&-> T &&
Definition named_arguments.h:48
A helper class for simulation named arguments in c++.
Definition named_arguments.h:76
constexpr auto arguments() const &-> Tuple< Args &&... > const &
Definition named_arguments.h:83
constexpr auto arguments() &&-> Tuple< Args &&... > &&
Definition named_arguments.h:84
constexpr auto arguments() &-> Tuple< Args &&... > &
Definition named_arguments.h:82
constexpr NamedArguments(Args &&... args)
Definition named_arguments.h:78
constexpr auto arguments() const &&-> Tuple< Args &&... > const &&
Definition named_arguments.h:85
meta::List< meta::Like< Args &&, typename meta::RemoveCVRef< Args >::Tag >... > Type
Definition named_arguments.h:80
Definition tuple_forward_declaration.h:5
Definition operations.h:11
Definition operations.h:99
Definition operations.h:24
A concept to check if a named argument is present.
Definition named_arguments.h:242
A concept to check if a list of named arguments is valid.
Definition named_arguments.h:261
Definition strong_int.h:23
Definition any_storable.h:9
Definition json_deserializer.h:532
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
constexpr auto get_named_argument
A helper function to access a named argument.
Definition named_arguments.h:126
constexpr auto get_named_argument_or
A helper function to access a named argument or a fallback value.
Definition named_arguments.h:179
NamedArguments(Args &&...) -> NamedArguments< Args &&... >
Definition zstring_parser.h:9
constexpr auto get(T &&value) -> decltype(auto)
Definition get.h:8
auto declval() -> meta::AddRValueReference< T >
Definition declval.h:8
Definition named_arguments.h:245
meta::Constexpr< meta::Contains< List, T > > Invoke
Definition named_arguments.h:247
Definition named_arguments.h:96
Definition named_arguments.h:130
constexpr auto operator()(Args &&args, U &&fallback) const -> decltype(auto)
Definition named_arguments.h:147