hasElaborateCopyConstructor bug?

SImen Kjærås simen.kjaras at gmail.com
Sat Jun 1 21:39:33 UTC 2019


On Saturday, 1 June 2019 at 21:05:32 UTC, SrMordred wrote:
> import std.traits;
>
> struct T { this(ref return scope T other){} }
> pragma(msg,  hasElaborateCopyConstructor!T); //false

hasElaborateCopyConstructor checks if the type defines a 
postblit[0]. That is, a function called this(this). this(T) is 
just a regular constructor, and as such does not qualify. From 
the documentation[1]:

     Elaborate copy constructors are introduced by defining 
this(this) for a struct.


Postblits are called after assignment, on the instance being 
assigned to, and has no access to the source of the assignment. 
If you need access to the source, a ref constructor like yours 
will work.

--
   Simen

[0]: https://dlang.org/spec/struct.html#struct-postblit
[1]: 
https://dlang.org/library/std/traits/has_elaborate_copy_constructor.html


More information about the Digitalmars-d-learn mailing list