https://issues.dlang.org/show_bug.cgi?id=23681
Issue ID: 23681 Summary: Generated copy constructors failing to generate Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: minor Priority: P1 Component: dmd Assignee: nob...@puremagic.com Reporter: alphaglosi...@gmail.com Copy constructors are failing to generate and be callable if a field is another struct that does define a copy constructor. This is quite frustrating for using reference counted types, resulting in more boiler plate than required. DMD32 D Compiler v2.101.0-dirty ```d void main() { Depender a, b; b = a; } struct Dependency { this(ref Dependency other) { this.tupleof = other.tupleof; } ~this() { } } struct Depender { Dependency dependency; } ``` Error: buggycopyctr.d(3): Error: generated function `buggycopyctr.Depender.opAssign(Depender p)` is not callable using argument types `(Depender)` buggycopyctr.d(3): generating a copy constructor for `struct Depender` failed, therefore instances of it are uncopyable Removing destructor from Dependency makes it compile. Adding an opAssign that takes Depender by ref also works: ```d void opAssign(ref Depender other) { this.tupleof = other.tupleof; } ``` I suspect this issue is strongly related to another issue with copy constructors I'm having: Error: generating an `inout` copy constructor for `struct sidero.base.logger.FileTarget` failed, therefore instances of it are uncopyable However I wasn't able to reproduce that error message, but I did come up with the above so it might be helpful to hunt it down. --