// Copyright (C) 2016-2018 T. Zachary Laine // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include namespace yap = boost::yap; struct alternate_expr_1 { static const yap::expr_kind kind = yap::expr_kind::plus; boost::hana::tuple<> elements; }; struct alternate_expr_2 { static const yap::expr_kind kind = yap::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 yap::expr_kind kind = yap::expr_kind::plus; }; struct non_expr_6 { static const yap::expr_kind kind = yap::expr_kind::plus; int elements; }; void compile_is_expr() { static_assert( yap::is_expr>::value, ""); static_assert( yap::is_expr const>::value, ""); static_assert( yap::is_expr const &>::value, ""); static_assert( yap::is_expr &>::value, ""); static_assert( yap::is_expr &&>::value, ""); { using namespace yap::literals; static_assert(yap::is_expr::value, ""); } static_assert( yap::is_expr>>>::value, ""); static_assert( yap::is_expr, yap::terminal>>>::value, ""); static_assert(yap::is_expr::value, ""); static_assert(yap::is_expr::value, ""); static_assert(!yap::is_expr::value, ""); static_assert(!yap::is_expr::value, ""); static_assert(!yap::is_expr::value, ""); static_assert(!yap::is_expr::value, ""); static_assert(!yap::is_expr::value, ""); static_assert(!yap::is_expr::value, ""); static_assert(!yap::is_expr::value, ""); }