Summary: removes const/immutable when converting a
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Phobos

--- Comment #0 from Steven Schveighoffer <> 2011-07-11 
10:19:14 PDT ---
The code in looks like this for converting to base/derived class:

Object-to-object conversions throw exception when the source is
non-null and the target is null.
T toImpl(T, S)(S value) if (is(S : Object) && is(T : Object))
    auto result = cast(T) value;
    if (!result && value)
        throw new ConvException("Cannot convert object of static type "
      " and dynamic type "
                ~" to type ";
    return result;

This does not take into account that cast can easily remove const or immutable

For example:

import std.conv;

class C {}
class D : C {}

void main()
    const(C) c = new D;
    D d = to!D(c);
    assert(d !is null);

This compiles as of 2.054, and clearly is removing const without requiring a

Unfortunately, cast() is the mechanism to do dynamic conversions, so the logic
to allow compilation needs to check that const is not being removed or
immutable is not being removed/added.

Configure issuemail:
------- You are receiving this mail because: -------

Reply via email to