5#include <scl/feature/detail/wrapper.h>
10namespace scl::feature::detail
12 template <
typename State,
template <
typename>
class... Executor>
18 template <
typename State,
template <
typename>
class Executor,
template <
typename>
class... Rest>
19 struct wrapper_fold<State, Executor, Rest...>
21 using type =
typename wrapper_fold<::scl::feature::detail::wrapper<State, Executor>, Rest...>::type;
24 template <
typename Value,
template <
typename>
class Executor,
template <
typename>
class... Rest>
25 struct wrapper_fold<::scl::feature::detail::wrapper<Value, Executor>, Executor, Rest...>
27 using type =
typename wrapper_fold<::scl::feature::detail::wrapper<Value, Executor>, Rest...>::type;
33 template <
typename Value,
template <
typename>
class... Executors>
34 using wrapper = ::std::conditional_t<
sizeof...(Executors) == 0,
35 typename ::scl::feature::detail::wrapper_fold<Value, ::scl::feature::inplace::plain>::type,
36 typename ::scl::feature::detail::wrapper_fold<Value, Executors...>::type>;
70 template <
typename Value,
template <
typename>
class... Executors>
98 template <
typename... Args>
99 constexpr explicit wrapper(Args &&... args)
150 template <concepts::wrapper Other>
152 requires(!::std::same_as<::std::remove_cvref_t<Other>,
wrapper> &&
154 decltype(wrapper_constructor_resolver<wrapper, Other &&>{other}.resolve())>);
Composable proxy wrapper that delegates to Value through executors.
Definition wrapper.h:72
constexpr wrapper(wrapper const volatile &&other)
Copy / move construction from the same wrapper type.
constexpr wrapper(wrapper volatile &other)
Copy / move construction from the same wrapper type.
constexpr wrapper(Other &&other)
Converting construction from a compatible wrapper type.
constexpr wrapper(wrapper &other)
Copy / move construction from the same wrapper type.
typedef executor_type
The outermost executor instantiation — Executor<value_type>.
Definition wrapper.h:78
constexpr wrapper(wrapper const volatile &other)
Copy / move construction from the same wrapper type.
constexpr wrapper()
Default construction — default-initialises the executor.
constexpr wrapper(wrapper const &other)
Copy / move construction from the same wrapper type.
constexpr wrapper(Args &&... args)
Direct construction — forwards all arguments to the executor.
constexpr wrapper(wrapper &&other)
Copy / move construction from the same wrapper type.
constexpr wrapper(wrapper const &&other)
Copy / move construction from the same wrapper type.
constexpr wrapper(wrapper volatile &&other)
Copy / move construction from the same wrapper type.
Value value_type
The wrapped value type.
Definition wrapper.h:75
Root namespace of the ScL project.
Executor that proxies calls directly to the held value with no overhead.