On Sunday, 31 January 2016 at 17:42:19 UTC, anonymous wrote:
On 31.01.2016 18:21, Matt Elkins wrote:
I know I can mark an argument ref to require lvalues, so I'm
wondering
whether there is an equivalent for rvalues; that is, is there
a way to
specify that an argument to a function MUST be an rvalue?
For example, in C++ I can do this:
[code]
void foo(int && x) {...}
foo(5); // Works fine
int y = 5;
foo(y); // Compile error; y is not an rvalue
[/code]
This functionality turns out to be really useful when dealing
with
transferring ownership of resources.
I don't know if this works in all cases, but it passes that
simple test:
----
@disable void foo(ref int x);
void foo(int x) {}
void main()
{
foo(5); /* works */
int y = 5;
foo(y); /* error */
}
----
The problem is that x will be copied afaik which is not what you
want if you want to deal with ownership.