Copy Constructor DIP and implementation

Nicholas Wilson iamthewilsonator at hotmail.com
Wed Sep 12 23:55:05 UTC 2018


On Wednesday, 12 September 2018 at 23:36:11 UTC, Jonathan M Davis 
wrote:
> On Wednesday, September 12, 2018 5:17:44 PM MDT Nicholas Wilson 
> via Digitalmars-d-announce wrote:
>> it seems that even if we were to want to have @implicit as an 
>> opposite of C++'s explicit it would _always_ be present on 
>> copy-constructors which means that @implicit for copy 
>> constructors should itself be implicit.
>
> Oh, yes. The whole reason it's there is the fear that not 
> requiring it would break code that currently declares a 
> constructor that would be a copy constructor if we didn't 
> require @implicit. So, if the DIP is accepted, you _could_ 
> declare a constructor that should be a copy constructor but 
> isn't, because it wasn't marked with @implicit (just like you 
> can right now). If code breakage were not a concern, then 
> there's pretty much no way that @implicit would be part of the 
> DIP. Personally, I don't think that the risk of breakage is 
> high enough for it to be worth requiring an attribute for what 
> should be the normal behavior (especially when such a 
> constructor almost certainly was intended to act like a copy 
> constructor, albeit an explicit one), but Andrei doesn't agree.

The bog-standard way of dealing with avoidable breakage with DIPs 
is a -dip-10xx flag. In this case, if set, would prefer to call 
copy constructors over blit + postblit.

Also adding @implicit is a backwards incompatible change to a 
codebase that wants to use it as it will cause it to fail on 
older compilers.  Even if one does :

static if (__VERSION__ < 2085) // or whenever it gets implemented
      enum implicit;
all over the place,

> It is illegal to declare a copy constructor for a struct that 
> has a postblit defined and vice versa:



More information about the Digitalmars-d-announce mailing list