[Issue 15762] New: Array casts involving const enums can be made @safe

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Fri Mar 4 16:35:13 PST 2016


https://issues.dlang.org/show_bug.cgi?id=15762

          Issue ID: 15762
           Summary: Array casts involving const enums can be made @safe
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Windows
            Status: NEW
          Severity: minor
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: dhasenan at gmail.com

According to dmd 2.070.0:

enum Windows1252Char : ubyte { init }

void main() @safe {
    ubyte[] a = [1, 2, 3, 4];
    auto aw = cast(Windows1252Char[]) a;          // valid
    auto caw = cast(const(Windows1252Char)[]) a;  // valid
    const(ubyte)[] c = [1, 2, 3, 4];
    auto d = cast(const(Windows1252Char)[]) c;    // invalid
}

arrcast.d(9): Error: cast from const(ubyte)[] to const(Windows1252Char)[] not
allowed in safe code

The compiler is fine if I cast mutable to mutable, or mutable to const, but I
can't cast const to const. Why not?

Switching from an enum type to a builtin type or struct makes things work, so
this looks like an oversight.

Context: I'm trying to make a @safe version of std.encoding, which does a ton
of casting between array types. I have to make much more code @trusted than I'd
like, and allowing const(ubyte) -> const(enum) casts would lead to far less
@trusted code.

--


More information about the Digitalmars-d-bugs mailing list