opCast in class prevents destroy

Mike Parker aldacron at gmail.com
Tue Mar 1 08:16:13 UTC 2022

On Tuesday, 1 March 2022 at 07:16:11 UTC, bauss wrote:

> Right now if you want to add an additional cast then you have 
> to implement ALL the default behaviors and then add your custom 
> cast.

It's two template functions like the OP used: one for T to catch 
everything, and one specialization.

> That doesn't seem correct to me at least.

Depends on your perspective I guess. For the inverse, when you 
want to allow only one kind of cast and prevent everything else, 
you only have to implement one template right now. If that were 
not the case, then you'd have to implement an additional 
catch-all template that bombs out with a static assert.

So either way makes sense, IMO. Though I totally understand how 
the current behavior can be a surprise when people expect it to 
behave like, e.g., C++.

But D is not C++. So is `opCast` intended to expand the list of 
target types (like C++), or is it intended to define it? The spec 
says, "To define how one type can be cast to another", which 
doesn't really answer the question.

More information about the Digitalmars-d-learn mailing list