/** Test multiple overloads of toString() */ module nxt.to_string; class Long { @safe: @property void toString(scope void delegate(scope const(char)[]) @safe sink) const { import std.conv : to; sink(_data.to!(string)); } pure nothrow: this(long data) @nogc { _data = data; } @property override string toString() @safe pure const { import std.conv : to; return _data.to!(typeof(return)); } private long _data; } @safe pure nothrow unittest { scope i = new Long(42); assert(i.toString == `42`); // picks non-delegate version } @safe unittest { import std.array : Appender; Appender!(int[]) app; scope i = new Long(42); i.toString(&(app.put!(const(char)[]))); assert(app.data == `42`); }