rvalue references template ?

Simen Kjærås simen.kjaras at gmail.com
Mon Jan 2 13:13:38 PST 2012


On Mon, 02 Jan 2012 15:02:30 +0100, Joshua Reusch <yoschi at arkandos.de>  
wrote:

> Is it possible to create a template turning any value into a lvalue?
> This would be helpful if a function expects a reference but you dont  
> need the result of the change:
>
> ///decode(S)(in S str, ref size_t index);
> auto c = std.utf.decode(some_string, lval!0);


template LRef( T, string f = __FILE__, int l = __LINE__ ) {
     static T LRef;
}

ref T lref( T, string f = __FILE__, int l = __LINE__ )( T value ) {
     LRef!( T, f, l ) = value;
     return LRef!( T, f, l );
}

unittest {
     assert( __traits( compiles, lref(0) = 3 ) );
}

This seems to work for me. 'course, there are limitations. Behind the
scenes, this creates a global variable per instantiation, and it
cannot be used more than once per line.


More information about the Digitalmars-d-learn mailing list