64 template <
typename Tag,
typename... Ts>
93 template <
typename... Us>
94 expr(Tag, Us &&...us) :
childs(std::forward<Us>(us)...) {}
104#ifdef __cpp_explicit_this_parameter
105 template <
typename Self,
typename... Args>
106 auto operator[](
this Self &&self, Args &&...args) {
110 template <
typename... Args>
114 template <
typename... Args>
119 template <
typename... Args>
133#ifdef __cpp_explicit_this_parameter
134 template <
typename Self,
typename... Args>
135 auto operator()(
this Self &&self, Args &&...args) {
139 template <
typename... Args>
144 template <
typename... Args>
149 template <
typename... Args>
159 template <
typename Tag,
typename... Ts>
160 struct ph_set<expr<Tag, Ts...>> : ph_set<Ts...> {};
163 template <
typename Tag,
typename... Ts>
164 constexpr bool is_lazy_impl<expr<Tag, Ts...>> =
true;
167 template <
typename Tag,
typename... Ts>
168 constexpr bool force_copy_in_expr_impl<expr<Tag, Ts...>> =
true;
Provides some utility functions and type traits for the CLEF library.
Single node of the expression tree.
expr & operator=(expr const &)=delete
Copy assignment operator is deleted.
auto operator()(Args &&...args) const &
Function call operator.
expr(expr &&ex) noexcept
Move constructor simply moves the child nodes from the source expression.
std::tuple< Ts... > childs_t
Tuple type for storing the child nodes.
expr & operator=(expr &&)=default
Default move assignment operator.
auto operator[](Args &&...args) const &
Subscript operator.
expr(expr const &)=default
Default copy constructor.
expr(Tag, Us &&...us)
Construct an expression node with a given tag and child nodes.
childs_t childs
Child nodes of the current expression node.