Bug 9325 – writeln of const class instance

Status
RESOLVED
Resolution
DUPLICATE
Severity
normal
Priority
P2
Component
phobos
Product
D
Version
D2
Platform
All
OS
All
Creation time
2013-01-16T01:45:00Z
Last change time
2013-01-25T11:25:49Z
Keywords
rejects-valid
Assigned to
nobody
Creator
bearophile_hugs

Comments

Comment #0 by bearophile_hugs — 2013-01-16T01:45:53Z
This program: import std.stdio: writeln; class Foo { int x = 5; } void main() { auto f = new Foo; writeln(f); } Prints (dmd 2.062alpha): test1.Foo While this: import std.stdio: writeln; class Foo { int x = 5; } void main() { const f = new Foo; writeln(f); } Gives: ...\dmd2\src\phobos\std\format.d(2435): Error: template instance formatObject!(LockingTextWriter, const(Foo), char) formatObject!(LockingTextWriter, const(Foo), char) does not match template declaration formatObject(Writer, T, Char)(ref Writer w, ref T val, ref FormatSpec!(Char) f) if (hasToString!(T, Char)) ...\dmd2\src\phobos\std\format.d(2435): Error: function expected before (), not formatObject!(LockingTextWriter, const(Foo), char) of type void ...\dmd2\src\phobos\std\format.d(2863): Error: template instance std.format.formatValue!(LockingTextWriter, const(Foo), char) error instantiating ...\dmd2\src\phobos\std\format.d(415): instantiated from here: formatGeneric!(LockingTextWriter, const(Foo), char) ...\dmd2\src\phobos\std\stdio.d(714): instantiated from here: formattedWrite!(LockingTextWriter, char, const(Foo)) ...\dmd2\src\phobos\std\stdio.d(1620): instantiated from here: write!(const(Foo),char) test2.d(5): instantiated from here: writeln!(const(Foo)) ...\dmd2\src\phobos\std\format.d(415): Error: template instance std.format.formatGeneric!(LockingTextWriter, const(Foo), char) error instantiating ...\dmd2\src\phobos\std\stdio.d(714): instantiated from here: formattedWrite!(LockingTextWriter, char, const(Foo)) ...\dmd2\src\phobos\std\stdio.d(1620): instantiated from here: write!(const(Foo),char) test2.d(5): instantiated from here: writeln!(const(Foo)) ...\dmd2\src\phobos\std\stdio.d(714): Error: template instance std.format.formattedWrite!(LockingTextWriter, char, const(Foo)) error instantiating ...\dmd2\src\phobos\std\stdio.d(1620): instantiated from here: write!(const(Foo),char) test2.d(5): instantiated from here: writeln!(const(Foo)) ...\dmd2\src\phobos\std\stdio.d(1620): Error: template instance std.stdio.File.write!(const(Foo),char) error instantiating test2.d(5): instantiated from here: writeln!(const(Foo)) test2.d(5): Error: template instance std.stdio.writeln!(const(Foo)) error instantiating
Comment #1 by andrej.mitrovich — 2013-01-16T17:56:16Z
The platform fields are not relevant unless it's a platform-specific problem.
Comment #2 by andrej.mitrovich — 2013-01-25T11:22:21Z
It's a problem with toString being non-const in the root Object class.
Comment #3 by andrej.mitrovich — 2013-01-25T11:25:49Z
Same as Issue 7879. *** This issue has been marked as a duplicate of issue 7879 ***