#include "expression.hpp" #include template using term = boost::proto17::terminal; namespace bp17 = boost::proto17; namespace bh = boost::hana; void compile_term_plus_x () { using namespace std::literals; // char const * string { term unity{1.0}; bp17::expression< bp17::expr_kind::plus, bh::tuple< bp17::expression_ref &>, term > > unevaluated_expr = unity + "3"; (void)unevaluated_expr; } // std::string temporary { term unity{1.0}; bp17::expression< bp17::expr_kind::plus, bh::tuple< bp17::expression_ref &>, term > > unevaluated_expr = unity + "3"s; (void)unevaluated_expr; } // arrays { term unity{1.0}; int ints[] = {1, 2}; bp17::expression< bp17::expr_kind::plus, bh::tuple< bp17::expression_ref &>, term > > unevaluated_expr = unity + ints; (void)unevaluated_expr; } { term unity{1.0}; int const ints[] = {1, 2}; bp17::expression< bp17::expr_kind::plus, bh::tuple< bp17::expression_ref &>, term > > unevaluated_expr = unity + ints; (void)unevaluated_expr; } { term unity{1.0}; int ints[] = {1, 2}; bp17::expression< bp17::expr_kind::plus, bh::tuple< bp17::expression_ref &>, term > > unevaluated_expr = unity + std::move(ints); (void)unevaluated_expr; } // pointers { term unity{1.0}; int ints[] = {1, 2}; int * int_ptr = ints; bp17::expression< bp17::expr_kind::plus, bh::tuple< bp17::expression_ref &>, term > > unevaluated_expr = unity + int_ptr; (void)unevaluated_expr; } { term unity{1.0}; int const ints[] = {1, 2}; int const * int_ptr = ints; bp17::expression< bp17::expr_kind::plus, bh::tuple< bp17::expression_ref &>, term > > unevaluated_expr = unity + int_ptr; (void)unevaluated_expr; } { term unity{1.0}; int ints[] = {1, 2}; int * int_ptr = ints; bp17::expression< bp17::expr_kind::plus, bh::tuple< bp17::expression_ref &>, term > > unevaluated_expr = unity + std::move(int_ptr); (void)unevaluated_expr; } // const pointers { term unity{1.0}; int ints[] = {1, 2}; int * const int_ptr = ints; bp17::expression< bp17::expr_kind::plus, bh::tuple< bp17::expression_ref &>, term > > unevaluated_expr = unity + int_ptr; (void)unevaluated_expr; } { term unity{1.0}; int const ints[] = {1, 2}; int const * const int_ptr = ints; bp17::expression< bp17::expr_kind::plus, bh::tuple< bp17::expression_ref &>, term > > unevaluated_expr = unity + int_ptr; (void)unevaluated_expr; } { term unity{1.0}; int ints[] = {1, 2}; int * const int_ptr = ints; bp17::expression< bp17::expr_kind::plus, bh::tuple< bp17::expression_ref &>, term > > unevaluated_expr = unity + std::move(int_ptr); (void)unevaluated_expr; } // values { term unity{1.0}; int i = 1; bp17::expression< bp17::expr_kind::plus, bh::tuple< bp17::expression_ref &>, term > > unevaluated_expr = unity + i; (void)unevaluated_expr; } { term unity{1.0}; int const i = 1; bp17::expression< bp17::expr_kind::plus, bh::tuple< bp17::expression_ref &>, term > > unevaluated_expr = unity + i; (void)unevaluated_expr; } { term unity{1.0}; int i = 1; bp17::expression< bp17::expr_kind::plus, bh::tuple< bp17::expression_ref &>, term > > unevaluated_expr = unity + std::move(i); (void)unevaluated_expr; } }