digitalmars.D.bugs - [Issue 19872] New: Copy constructor: Order of declaration yields
- d-bugmail puremagic.com (35/35) May 14 2019 https://issues.dlang.org/show_bug.cgi?id=19872
https://issues.dlang.org/show_bug.cgi?id=19872 Issue ID: 19872 Summary: Copy constructor: Order of declaration yields different results with rvalue constructor Product: D Version: D2 Hardware: x86_64 OS: Linux Status: NEW Severity: blocker Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: atila.neves gmail.com The code below contains identical struct declarations except for the order of the constructors in the body. Yet, `Ok` compiles file and `Oops` does not: ---------------------- struct Ok { this(ref Ok other); this(Ok other); } struct Oops { this(Oops other); this(ref Oops other); } ---------------------- bug.d(7): Error: struct Oops may not define both a rvalue constructor and a copy constructor bug.d(8): rvalue constructor defined here bug.d(9): copy constructor defined here The order shouldn't make a difference on whether or not the code compiles, but nearly as importantly: *why* wouldn't one be able to declare both a copy constructor and an rvalue one? How else would one have both copy and move semantics? --
May 14 2019