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.

Reply via email to