On Tuesday, April 10, 2012 00:39:26 Michel Fortin wrote: > Le 2012-04-10 à 0:06, Jonathan M Davis a écrit : > > Having to duplicate pretty much every single function which takes a const > > ref - opEquals and opCmp being very prominent among them - is a definite > > problem. That's the problem that auto ref was intended to solve, and as > > long as it only works with templated functions, it really doesn't solve > > the problem. > I think the implementation of auto-ref you want is one where the argument is > always passed by ref but it the function would also accept lvalues. I think > "auto ref" is a misnomer for that. > > Actually, I think the true problem you are trying to solve using auto-ref is > one of efficiency: you don't want all structs to be passed by copy because > often that'd be inefficient. Disregarding efficiency, all cases where you > want to use auto-ref you could pass the struct by copy instead. Am I right?
Yes, assuming that you're not dealing with a struct which isn't copyable. In C++, you use const& for objects to avoided unnecessary duplication. But that doesn't work in D, since const ref won't take rvalues. So, you're forced to duplicate the function. Also, some functions have historically required const ref (e.g. opEquals), but I don't know if they do now or not. The whole point of auto ref is to have the compiler take the argument in the most efficient manner - be it by ref or by value; you don't care which. But it only works with templated functions right now, so it doesn't really solve the problem. I really don't care how it's implemented for not-templated functions. It can be the outright equivalent of C++'s const& for all I care. But without auto ref on non-templated functions, we're forced to duplicate any non-templated function which takes const ref. - Jonathan M Davis _______________________________________________ dmd-beta mailing list [email protected] http://lists.puremagic.com/mailman/listinfo/dmd-beta
