On Thu, Oct 23, 2014 at 10:39:34AM +0530, Shriramana Sharma via Digitalmars-d-learn wrote: > IIUC the whole deal with not allowing ref parameters to point to > rvalues is the fear that they may be returned outside the function, > but it seems this is already possible: > > module reftest ; > import std.stdio ; > struct Pair { > int x, y ; > this (int x_, int y_) { x = x_ ; y = y_ ; writeln("Pair constructed") ; > } > auto handle() { return this ; } > } > void main() { > auto P = Pair(1, 2).handle ; > writeln(typeof(P).stringof) ; > P.x = 3 ; > writeln(P.x, ' ', P.y) ; > } > > Running this makes it clear that only the one Pair object is ever > constructed. But I don't understand how it is that the type of P is > Pair and not ref(Pair). [...]
ref is a storage class, not a type constructor. There is actually no such type as ref(Pair). The 'ref' applies only to the function parameter (or return value), NOT to whatever it gets assigned to. T -- Microsoft is to operating systems & security ... what McDonalds is to gourmet cooking.