On Fri, 10 Feb 2017 12:32:19 -0800, Walter Bright wrote: > On 2/10/2017 4:41 AM, Nemanja Boric wrote: >> I saw it happen with D as well: everything compiles, everything is >> fine, and suddenly segfault. The issue was caused by template argument, >> two modules with the same name, but from different packages (think >> `myalib.blah.morebla.foo` and `myblib.blah.morebla.foo`) and a cast >> somewhere in the middle of the callstack which casted the first >> template argument to the second one, where the `myalib`'s foo was >> casted to `myblib`'s interface. > > That's why such casts are not allowed in @safe code.
I'm a bit surprised by that. In @system code, you can cast, and it results in a null pointer. A well-known value. Just like using an uninitialized variable. And @safe doesn't stop you from using uninitialized variables.