Hans Åberg wrote: > >>>> The idea would be to write something equivalent to > >>>> return make_unique<foo>($1, $2, $3); > >>>> and the Bison writes something like > >>>> $$ = std::move(action_k(...return make_unique<foo>($1, $2, $3);...)) > >>> > >>> I don't follow you. What is action_k, and how would that cause > >>> moving from $1 etc.? > >> > >> Action k in the switch statement. > > > > Huh? I really don't get what your proposed syntax is supposed to > > mean. Is action_k supposed to be a lambda (what else could appear in > > an expression and contain a statement inside)? What would it do? > > Just produce an r-value.
Again: - make_unique already produces an rvalue - (I'll ignore the "...return", since you didn't comment on it, I assume it's a typo) - Then, you say, action_k produces an rvalue, from an rvalue? - Finally, std::move takes this rvalue and turns it into an rvalue (because that's what std::move does). Do you want a triple-r-value? Sorry if I'm a bit cynical meanwhile, but I said I don't follow what you intend to do, so it would be nice to explain it with something more than half a sentence, really. > >> Move operators were originally designed to avoid copying in returns. > > > > I don't know if this was so or not originally, but I'm talking about > > moving arguments, not return values. That's what I've been saying > > the whole time, including the thread subject! Moving the return > > value is no big problem most of the time: "$$ = make_unique ..." > > works without any std::move because a function result(*) is > > automatically an rvalue. > > The idea is to create an r-value situation, which then translates into a move > assignment. Again, make_unique already "creates an rvalue situation". And, also again, how does any of that help with moving from $1, $2 etc. which is the actual topic? Regards, Frank
