On Thursday, September 12, 2013 12:42:34 H. S. Teoh wrote: > On Thu, Sep 12, 2013 at 09:12:18PM +0200, bearophile wrote: > > H. S. Teoh: > > >In phobos git HEAD, std.format has been made pure @safe nothrow (and > > > > > >CTFE-able), so you should be able to write your assert as: > > > assert(condition, format("x = %s, blahblah", x)); > > > > With the latest DMD from updated GIT head: > > > > > > import std.string: format; > > void main() pure nothrow { > > > > string x = "hello"; > > bool condition = true; > > assert(condition, format("x = %s, blahblah", x)); > > > > } > > > > > > It gives: > > > > test.d(5): Error: 'std.string.format!(char, string).format' is not nothrow > > test.d(2): Error: function 'D main' is nothrow yet may throw > > [...] > > Oops. Apparently I wrote nothrow but forgot to test it. I did test pure > and @safe, though, so at least those two should work.
format can't be nothrow, because it throws when you screw up the format specifiers. You have to wrap it in a try-catch block and assert(0) in the catch block if you want to put it in a nothrow function. std.datetime does this in at least a few places. - Jonathan M Davis