http://d.puremagic.com/issues/show_bug.cgi?id=3731
Stewart Gordon <s...@iname.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|Can implicitly cast an |Derived class implicitly |immutable reference to a |convertible to base class |derived class |with arbitrary change of | |constancy --- Comment #9 from Stewart Gordon <s...@iname.com> 2012-03-25 07:52:59 PDT --- (In reply to comment #1) > The solution would be to make it illegal to have a mutable class reference to > the base class. No, because a Zmienna is perfectly allowed to be mutable. It's Stala that isn't. > In your example, this line should be an error: > > Zmienna zm = st; // error, must use immutable(Zmienna) or const(Zmienna) Correct, since because Stala is immutable, any object reference of type Stala is actually of type immutable(Stala). The bug is that constancy is ignored when converting from a derived class to a base class, as this code shows (DMD 2.058, Win32): ---------- class Base { int x; } class Derived : Base { int y; } void main() { Derived md; const(Derived) cd; immutable(Derived) id; Base mb_md = md; const(Base) cb_md = md; immutable(Base) ib_md = md; // accepts-invalid Base mb_cd = cd; // accepts-invalid const(Base) cb_cd = cd; immutable(Base) ib_cd = cd; // accepts-invalid Base mb_id = id; // accepts-invalid const(Base) cb_id = id; immutable(Base) ib_id = id; } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------