This code is normal: import std.conv; class BasicDate { string format(string spec) in { writeln("in basicdate.format contract"); writeln(spec); assert(spec == "1234"); } body { return ""; } } class Date : BasicDate { override string format(string spec) in { writeln("in date.format contract"); writeln(spec); assert(spec == "1234"); } body { //~ string x; return ""; } } import std.stdio; unittest { auto mydate = new Date; mydate.format("1234"); } void main() { } Prints: in basicdate.format contract 1234 Now I uncomment the "string x" line in the overriding function: import std.conv; class BasicDate { string format(string spec) in { writeln("in basicdate.format contract"); writeln(spec); assert(spec == "1234"); } body { return ""; } } class Date : BasicDate { override string format(string spec) in { writeln("in date.format contract"); writeln(spec); assert(spec == "1234"); } body { string x; return ""; } } import std.stdio; unittest { auto mydate = new Date; mydate.format("1234"); } void main() { } Prints: in basicdate.format contract (null) in date.format contract 1234
Under DMD 1.063, it fails as written as writeln isn't defined, but if changed to writefln I get in basicdate.format contract xin date.format contract 1234 Under 2.048, I get the same, but if I change it to use writefln then I get in basicdate.format contract in date.format contract 1234
*** This issue has been marked as a duplicate of issue 7335 ***