std.string.format throws runtime exception for BigInt and for BitArray types even though writefln works fine. The run-time error says std.format.FormatException@std/format.d(4744): Can't convert std.bigint.BigInt to string: "string toString()" not defined Here is a small test case: void main() { import std.stdio; import std.string; import std.bigint; import std.bitmanip; BigInt aa = 100; BitArray bb; bb.init([true, false]); writefln("%x", aa); writefln("%x", bb); writeln(format("%x", aa)); // throws exception writeln(format("%x", bb)); // throws exception }
Yeah std.string.format is being deprecated, because it is an inferior version of std.format. Until it is replaced by the latter, using xformat should work (xformat simply calls std.format so it will be identical to writeln & friends).
I meant to paste the modified code: void main() { import std.stdio; import std.string; import std.bigint; import std.bitmanip; BigInt aa = 100; BitArray bb; bb.init([true, false]); writefln("%x", aa); writefln("%x", bb); writeln(xformat("%x", aa)); // this works writeln(xformat("%x", bb)); // this works }
This bug has been fixed in latest git head.