
Samuel Krempp wrote:
And for implicit conversion to do any harm, you need to mistakenly pass boost::format to a function which takes std::string, right? In this case, boost::format will immediately throw and you'll detect the bug in no time.
The problem I find more concerning is implicit conversions caused by typo in operators
s = format("name=%1 processed") % s1 + s2;
if format is convertible to string, the type of s2 here might be such that this line compiles (e.g. s2 of type string), so such typos could go unnoticed for a while..
You mean, the human intended to pass two arguments to format, but typed '+' instead of '%'. Then, I think the format string will most probably contain two format specifiers: s = format("name=%1 processed, results is %2%") % s1 + s2; and you'll get an exception on the first execution of this line -- which supposedly will be executed during testing. (BTW, does your example miss '%' after '%1', or I misunderstand something about format specifiesrs).
My opinion was it's safe to use operators for format as long as it is not implictly-convertible.
You can still make mistakes, like omitting paranthesis in: format("reminder = %%") % (a % b) - Volodya