On Thursday, October 18, 2012 05:07:52 Malte Skarupke wrote: > What do you think?
Okay. Here are more links to Andrei discussing the problem: http://forum.dlang.org/post/[email protected] http://www.mail-archive.com/[email protected]/msg44070.html http://www.mail-archive.com/[email protected]/msg43769.html http://forum.dlang.org/post/[email protected] He is completely convinced that letting rvalues bind to const& in C++ was a huge mistake, and it seems to come down mainly to this: "The problem with binding rvalues to const ref is that once that is in place you have no way to distinguish an rvalue from a const ref on the callee site." And apparenly it required adding the concept of rvalue references to C++, which complicated things considerably. It's too bad that he hasn't replied to some of the more detailed questions on the matter in this thread, but if you want rvalues to bind to const ref in D, you're going to have to convince him. At this point, I expect that the most likely solution is that auto ref will continue to work like it does in templates but for non-templated functions it will become like const ref is in C++ and accept rvalues without copying lvalues. Andrei suggests that in at least one of those posts, and AFAIK, it would work just fine. The only real downside that I'm aware of is that then the semantics of auto ref are slightly different for non-templated functions, but you're doing basically the same thing with auto ref in both cases - avoiding copying lvalues and only copying rvalues when you have to - so it really shouldn't be a problem. The main problem is that someone needs to go and implement it. - Jonathan M Davis
