import std.stdio, std.conv;
struct Foo {
string toString() {
return "test";
}
}
void main() {
Foo test;
//Doesn't work. std.conv unaware of foo.toString().
writefln(to!(string)(test));
}
Obviously, this is a very simplified test case, but when writing generic code, it can become a legitimate issue. Also note that the following test case, which just changes Foo to a class, actually works.
import std.stdio, std.conv;
class Foo {
this(){}
string toString() {
return "test";
}
}
void main() {
Foo test = new Foo;
writefln(to!(string)(test));
}
I've found the bug and the fix is a dead simple two-liner. I'll attach the diffs against conv.d.
Comment #1 by dsimcha — 2008-08-16T18:52:07Z
Created attachment 270
Call toString() if available.
Comment #2 by dsimcha — 2008-08-16T19:53:18Z
Please ignore the patch I posted. Upon further testing, it seems to break other stuff.
Comment #3 by andrei — 2008-08-16T23:23:12Z
Added the appropriate code. Hopefully that doesn't break anything else :o). Committed, will be distributed with next release.