On 07/12/2018 10:54 AM, Jonathan M Davis wrote:
On Thursday, 12 July 2018 07:45:30 MDT Andrei Alexandrescu via Digitalmars-d
wrote:
I also very much dislike the syntax - it makes no sense to me at all. I
commented on the PR itself asking why it differs so much from C++ -
specifically, what's bad about the C++ way of doing things there that we
want to avoid?

C++ is at the other end of the spectrum - constructors are too implicit,
so the "explicit" keyword has been introduced with the advice to use it
in the vast majority of cases. If C++ could do it again, it would make
everything explicit and add an "implicit" keyword.

That's only an issue in C++, because C++ uses constructors for implicit
conversions unless you mark them with explicit. D doesn't ever do implicit
conversions like that. All constructors are effectively explicit. Is this
DIP proposing that we add such implicit conversions?

The DIP is proposing what's in the DIP :o). We actually clarify this in text:

"The type of the parameter to the copy constructor needs to be identical to typeof(this); an error is issued otherwise. This requirement may be relaxed in the future in order to accomodate implicit copying from objects of a different type:" [example follows]

I really don't understand what the purpose of @implicit is here. What's the
problem of just going off of the type of the constructor's single parameter
to determine whether it's a copy constructor?

That would silently change semantics of existing code, which is to be avoided.


Andrei

Reply via email to