Declaring rvalue function arguments

Matt Elkins via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Jan 31 09:54:15 PST 2016


On Sunday, 31 January 2016 at 17:42:19 UTC, anonymous wrote:
> 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 */
> }
> ----

My fault, I should have better explained the situation I'm 
running into. I've boiled it down to this:

[code]
struct Foo
{
     @disable this(this);
     @disable void opAssign(ref Foo);
     void opAssign(Foo foo) {}
}

unittest
{
     void bar(Foo foo)
     {
         Foo foo1;
         foo1 = foo; // Fails to compile here
     }
     Foo makeFoo() {return Foo();}
     bar(Foo());
}
[/code]

[output]
Error: function Foo.opAssign is not callable because it is 
annotated with @disable
[/output]

Note that if I don't declare and assign foo1 on separate steps it 
yells at me for the post-blit constructor being disabled, which 
is reasonable. But it seems like the rvalue assignment operator 
should work...


More information about the Digitalmars-d-learn mailing list