SPROUT_CONSTEXPR result_type operator()( Expr const& expr, context_type const& ctx ) const { return call<limit::value == std::size_t(-1)>( sprout::tuples::get<0>(expr.args()), ctx, sprout::weed::eval(sprout::tuples::get<0>(expr.args()), ctx) ); }
SPROUT_CONSTEXPR result_type operator()( Expr const& expr, context_type const& ctx ) const { return call(expr.args(), ctx); }
SPROUT_CONSTEXPR result_type operator()( Expr const& expr, context_type const& ctx ) const { return call(ctx, sprout::weed::eval(sprout::tuples::get<0>(expr.args()), ctx)); }
SPROUT_CONSTEXPR result_type operator()( Expr const& expr, context_type const& ctx ) const { return sprout::weed::eval(sprout::tuples::get<0>(expr.args()), ctx).success() ? result_type(true, ctx.begin(), attribute_type(), ctx) : result_type(false, ctx.begin(), attribute_type(), ctx) ; }
SPROUT_CONSTEXPR result_type operator()( Expr const& expr, context_type const& ctx ) const { return call( sprout::tuples::get<0>(expr.args()) .template operator()(ctx.begin(), ctx.end(), ctx), ctx ); }
SPROUT_CONSTEXPR result_type operator()( Expr const& expr, context_type const& ctx ) const { typedef typename std::iterator_traits<Iterator>::value_type elem_type; return ctx.begin() != ctx.end() && *ctx.begin() == elem_type(sprout::tuples::get<0>(expr.args())) ? result_type( true, sprout::next(ctx.begin()), attribute_type(), context_type(ctx, sprout::next(ctx.begin())) ) : result_type(false, ctx.begin(), attribute_type(), ctx) ; }