http://d.puremagic.com/issues/show_bug.cgi?id=6288
Summary: std.conv.to removes const/immutable when converting a class Product: D Version: D2 Platform: All OS/Version: All Status: NEW Severity: normal Priority: P2 Component: Phobos AssignedTo: nob...@puremagic.com ReportedBy: schvei...@yahoo.com --- Comment #0 from Steven Schveighoffer <schvei...@yahoo.com> 2011-07-11 10:19:14 PDT --- The code in std.conv.to 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 " ~S.classinfo.name~" and dynamic type "~value.classinfo.name ~" to type "~T.classinfo.name); } return result; } This does not take into account that cast can easily remove const or immutable decorations. 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 cast. 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: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------