#include "expression.hpp" namespace bp17 = boost::proto17; struct alternate_expr_1 { static const bp17::expr_kind kind = bp17::expr_kind::plus; boost::hana::tuple<> elements; }; struct alternate_expr_2 { static const bp17::expr_kind kind = bp17::expr_kind::plus; boost::hana::tuple elements; }; struct non_expr_1 { }; struct non_expr_2 { boost::hana::tuple elements; }; struct non_expr_3 { static const int kind = 0; boost::hana::tuple elements; }; struct non_expr_4 { int kind; boost::hana::tuple elements; }; struct non_expr_5 { static const bp17::expr_kind kind = bp17::expr_kind::plus; }; struct non_expr_6 { static const bp17::expr_kind kind = bp17::expr_kind::plus; int elements; }; void compile_is_expr () { static_assert(bp17::detail::is_hana_tuple>::value); static_assert(bp17::detail::is_hana_tuple>::value); static_assert(! bp17::detail::is_hana_tuple::value); static_assert( bp17::detail::is_hana_tuple< bp17::detail::remove_cv_ref_t< decltype(std::declval>().elements) > >::value ); static_assert(bp17::detail::is_expr>::value); static_assert(bp17::detail::is_expr const>::value); static_assert(bp17::detail::is_expr const &>::value); static_assert(bp17::detail::is_expr &>::value); static_assert(bp17::detail::is_expr &&>::value); static_assert(bp17::detail::is_expr>::value); static_assert(bp17::detail::is_expr>>>::value); static_assert(bp17::detail::is_expr, bp17::terminal>>>::value); static_assert(bp17::detail::is_expr::value); static_assert(bp17::detail::is_expr::value); static_assert(! bp17::detail::is_expr::value); static_assert(! bp17::detail::is_expr::value); static_assert(! bp17::detail::is_expr::value); static_assert(! bp17::detail::is_expr::value); static_assert(! bp17::detail::is_expr::value); static_assert(! bp17::detail::is_expr::value); static_assert(! bp17::detail::is_expr::value); }