On Thursday, 8 March 2018 at 15:13:09 UTC, Steven Schveighoffer wrote:
On 3/8/18 9:58 AM, joe wrote:
On Monday, 5 March 2018 at 10:57:35 UTC, Jonathan M Davis wrote:
Here's something I wrote up on const:

May be not entirely related, but a little gotcha.


interface XY {}

class Foo: XY {}
class Bar: XY {}

void doSomething(in XY sth)
   auto foo = cast(Foo)sth; // error in @safe code

But the compiler doesn't emit a warning that const got cast away in @system code. Since @system is the default setting and casting const away is by definition undefined behavior, there should be some feedback.

If you cast away const in C++ you need to be explicit about it by using const_cast, documents the intention rather than D's swiss-army-cast.

This is a problem with the cast system, not const. ...

I figured. Sorry for off topic.

... D has one cast mechanism, and it's used to:

a) dynamic type cast
b) hook user-supplied opCast
c) enter undefined behavior by casting away const/immutable.

I really think we should have a separate mechanism for a and b, as they are far less dangerous than c.

std.conv.to does this as well, ...

Thanks for pointing this out.

...but the language should have some safeguards against using "safe casting" incorrectly.


yes, that's what I was aiming for :)

This one got me because I assumed, with all the improved security in place, D would never silently do such a thing... Assumptions, right? ...the root of all evil. I should know better. haha.

Anyways, thanks for the insight and have a nice Sunday.

Reply via email to