Boost logo

Boost :

From: Vladimir Prus (ghost_at_[hidden])
Date: 2005-03-31 01:54:45


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


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk