|
Proto : |
Subject: [proto] Using make_expr with as_child or as_expr
From: Mathias Gaunard (mathias.gaunard_at_[hidden])
Date: 2011-04-18 09:44:41
make_expr is a fairly "funny" function, in that it decides whether the
children should be taken by value or reference depending on whether
they're wrapped in boost::(c)ref or not.
In some cases, I really want to write something like
proto::make_expr(
proto::as_child(a0),
proto::as_child(a1)
)
but that kind of thing doesn't work, due to the funny way make_expr works.
I guess the perfect solution would be for make_expr to detect whether
its argument is an rvalue and take it by value in that case, and take by
reference otherwise.
But that could be tricky for a C++03 compiler.
I suggest that in the time being, variants of proto::make_expr be added:
proto::make_expr_expr(a0, a1) would take terminals by value and the rest
by reference
proto::make_expr_child(a0, a1) would take terminals by reference and the
rest by value
Names, of course, could be improved.
Maybe there is already some functions I missed that do what I want?
Proto list run by eric at boostpro.com