19 template<
typename Tag,
typename Val>
23 [[no_unique_address]] Val
value;
27 template<
typename Tag, concepts::CopyConstructible Val>
33 template<
typename Tag>
39 template<
typename Tag>
48 template<
typename Tag, concepts::TypeList List>
51 template<
typename Tag,
typename List>
55 template<
typename BaseEnv,
typename Withs>
58 template<
typename BaseEnv,
typename... Overrides>
59 struct EnvT<BaseEnv,
meta::List<Overrides...>> {
62 template<
typename... Args>
63 constexpr explicit Type(BaseEnv base_env, Overrides... overrides)
64 : m_base_env(
util::move(base_env)), m_overrides(
util::move(overrides)...) {}
67 template<
typename Tag>
73 template<concepts::ForwardingQuery Tag>
76 return tag(self.m_base_env);
79 [[no_unique_address]] BaseEnv m_base_env;
80 [[no_unique_address]]
vocab::Tuple<Overrides...> m_overrides;
84 template<
typename BaseEnv,
typename... Withs>
88 template<
typename BaseEnv,
Override... Overrides>
89 constexpr auto operator()(BaseEnv base_env, Overrides... overrides)
const {
91 "di::execution::make_env() must be called with unique overrides.");
92 return Env<BaseEnv, Overrides...> { util::move(base_env), util::move(overrides)... };
160template<
typename Tag,
typename Val>
173template<
typename Tag>
188template<
typename BaseEnv,
typename... Withs>
Definition tuple_forward_declaration.h:5
meta::Type< EnvT< BaseEnv, meta::List< Withs... > > > Env
Definition make_env.h:85
meta::Front< meta::Filter< List, meta::Compose< meta::SameAs< Tag >, meta::Quote< meta::Type > > > > LookupTag
Definition make_env.h:49
constexpr auto without
Specify a removal of an environment query override.
Definition make_env.h:127
constexpr auto make_env
Create an environment with overrides for queries.
Definition make_env.h:147
make_env_ns::Without< Tag > Without
Represent a removal of an environment query value.
Definition make_env.h:174
constexpr auto with
Specify an override for an environment query.
Definition make_env.h:112
make_env_ns::With< Tag, Val > With
Represent a override for an environment query.
Definition make_env.h:161
decltype(make_env(util::declval< BaseEnv >(), util::declval< Withs >()...)) MakeEnv
Represent an environment with overrides for queries.
Definition make_env.h:189
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
constexpr auto get(T &&value) -> decltype(auto)
Definition get.h:8
auto declval() -> meta::AddRValueReference< T >
Definition declval.h:8
constexpr friend auto tag_invoke(Tag, Type const &self)
Definition make_env.h:69
constexpr Type(BaseEnv base_env, Overrides... overrides)
Definition make_env.h:63
constexpr friend auto tag_invoke(Tag tag, Type const &self) -> decltype(auto)
Definition make_env.h:75
constexpr auto operator()(BaseEnv base_env, Overrides... overrides) const
Definition make_env.h:89
constexpr auto operator()(Tag, Val &&value) const
Definition make_env.h:28
Val value
Definition make_env.h:23
Tag Type
Definition make_env.h:21
constexpr auto operator()(Tag) const
Definition make_env.h:40
Tag Type
Definition make_env.h:35