xxxxxxxxxx
import std.stdio;
void main()
{
auto writer = buildWriter();
// Tester tester = writerFor(writer); // It's OK
// Tester tester = new Tester(writer); // It's OK
// Tester tester = new Tester(buildWriter()); // can't compile
Tester tester = writerFor(buildWriter()); // Here is a bug
tester.run("for test");
}
struct StringWriter
{
void put(string s)
{
writeln(s, ` `, a);
}
int a = 123;
}
auto writerFor(OutRange)(auto ref OutRange outRange)
{
auto res = new Tester(outRange);
return res;
}
StringWriter buildWriter()
{
return StringWriter();
}
class Tester
{
private StringWriter* writer;
this(ref StringWriter output)
{
writer = &output;
writeln("in setSink: ", this.writer);
}
void run(string m)
{
writer.put(m);
}
}