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