namespace boost { namespace yap { template<typename Expr> struct expression_function; template<typename Expr> decltype(auto) deref(Expr &&); template<typename T> decltype(auto) value(T &&); template<typename Expr, typename I> decltype(auto) get(Expr &&, I const &); template<long long I, typename Expr> decltype(auto) get_c(Expr &&); template<typename Expr> decltype(auto) left(Expr &&); template<typename Expr> decltype(auto) right(Expr &&); template<typename Expr> decltype(auto) cond(Expr &&); template<typename Expr> decltype(auto) then(Expr &&); template<typename Expr> decltype(auto) else_(Expr &&); template<typename Expr> decltype(auto) callable(Expr &&); template<long long I, typename Expr> decltype(auto) argument(Expr &&, hana::llong< I >); template<template< expr_kind, class > class ExprTemplate, expr_kind Kind, typename... T> auto make_expression(T &&...); template<template< expr_kind, class > class ExprTemplate, typename T> auto make_terminal(T &&); template<template< expr_kind, class > class ExprTemplate, typename T> decltype(auto) as_expr(T &&); template<typename Expr> auto make_expression_function(Expr &&); template<typename... T> auto replacements(T &&...); template<typename Expr, typename... T> decltype(auto) replace_placeholders(Expr &&, T &&...); template<typename... T> auto evaluation(T &&...); template<typename Expr, typename... T> decltype(auto) evaluate(Expr &&, T &&...); template<typename Expr, typename Transform, typename... Transforms> decltype(auto) constexpr transform(Expr &&, Transform &&, Transforms &&...); template<typename Expr, typename Transform, typename... Transforms> decltype(auto) transform_strict(Expr &&, Transform &&, Transforms &&...); } }