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