Rvalue references - The resolution
Rob T
alanb at ucora.com
Mon May 6 14:55:41 PDT 2013
On Monday, 6 May 2013 at 14:05:48 UTC, Andrei Alexandrescu wrote:
> template <class T> const T& min(const T& a, const T& b) {
> return b < a ? b : a;
> }
> ...
> int x = ...;
> auto & weird = min(x, 100);
>
What I see going on is an attempt to double up on the use of ref
for twp conflicting purposes. Perhaps part of the solution is to
use a new variation of ref that allows rvalues and lvalues, while
normal ref continues to disallow rvalues, eg ref vs refr.
void foo(ref b)
{
...
}
ref T min(ref T a, refr T b) {
++b; // error refr cannot be modified
foo(b); // error, cannot pass refr to normal ref
return b < a ? b : a; // error cannot return refr
}
The "auto ref" system can then be extended to determine if normal
ref or refr is required, and refuse to compile when the rules are
violated rather than try and fake a real ref with a temporary,
since I would think that's something you'd normally never want
done anyway.
A runtime safety check will still be needed for returns of normal
ref that may escape.
I can definitely agree on the runtime safety check, but I have
doubts about the idea of faking a real ref.
--rt
More information about the Digitalmars-d
mailing list