www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - error: rvalue constructor and a copy constructor

reply vit <vit vit.vit> writes:
Hello, I have this code:

```d

import core.lifetime : move, forward;
import std.stdio : writeln;

struct Foo{
     int i;

     static auto make(int i){
     	Foo tmp;
         tmp.i = i;
         return move(tmp);
     }

     this(scope const ref typeof(this) rhs){
     	this.i = rhs.i;
         writeln("copy");
     }

     this(T)(scope const T rhs)
     if(is(immutable T == immutable typeof(this))){
     	this.i = rhs.i;
         writeln("move");
     }

}

auto foo(T)(auto ref T x){
	return Foo(forward!x);
}

void main(){
     Foo x = foo(Foo.make(1));
     writeln("end");
}
```

When is this code compiled with 2.098.1 then it print:

```
Error: Cannot define both an rvalue constructor and a copy 
constructor for `struct Foo`
        Template instance `__ctor!(Foo)` creates a rvalue 
constructor for `struct Foo`
Error: template instance `onlineapp.Foo.__ctor!(Foo)` error 
instantiating
        instantiated from here: `foo!(Foo)`
```

When is compiled by dmd-beta/dmd-nightly then it works fine.

Is dmd-beta/dmd-nightly with bug or is this new valid behaviour?
Jan 12 2022
parent vit <vit vit.vit> writes:
On Wednesday, 12 January 2022 at 08:04:19 UTC, vit wrote:
 Hello, I have this code:

 ```d

 [...]
run.dlang.io has old version of dmd-beta/dmd-nightly with bug
Jan 12 2022