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.