On Saturday, 30 March 2013 at 14:37:11 UTC, Namespace wrote:
That's nice to hear. I was afraid I would be too intrusive on this. And I've finally did it: A& works now. It was a bit tricky, but now it works nicely. Here a quick example:

void bar1(A& a) { } // OK
void bar2(A&* a) { } // Error: '&' can not be used in combination with '*' void bar3(A*& a) { } // Error: '&' can not be used in combination with '*'
void bar4(const A& a) { } // OK
void bar5(ref A& a) { } // Error: conflicting storage class '&' and ref

and for templates:

void bar(T)(T& t) {
        writeln(t);
}

Thoughts?

It's esoteric, which is bad, but concise, which is good. I think perhaps the annoying aspect of this feature is how attractive it would be to just get the power of the feature implicitly without needing a new attribute or keyword. To get it implicitly, and only have an attribute for when you *don't want an rvalue, e.g.:

void foo(@lvalue ref T a) {}

...would break code, but is nonetheless less something to consider also.

Reply via email to