|
Boost : |
From: Alexander Nasonov (alnsn_at_[hidden])
Date: 2006-09-11 09:47:54
David Abrahams wrote:
>"Alexander Nasonov" <alnsn_at_[hidden]> writes:
>> (in C++, broken invariants are often subtle and dangerous)
>> - No way to grep overflow checks
>
>What does that mean?
The first statement means that, for example you can leave some member uninitialized then an exception is thrown unexpectedly.
The second that it's harder to identify all places where overflow checks are made. Compare i = i + j and is_mathematically_correct(_1 = _1 + _2)(i, j). The latter can be searched with grep -rl is_mathematically_correct .
>> Unlike ignored return types, compilers don't print any warning on
>> ignored throw clause
>> - I can hardly imagine that I change some int
>> members of popular classes in a hope that it would magically work
>> when I resolve hundreds of compiler erros
>
>What does that mean?
Sentence 1.
If your goal is to identify all places where error checking is ignored, you may try to increase warning level and see if there are any "return value is ignored" warnings. However, it's not the case for errors that are indicated by throwing an exception.
Sentense 2.
You wrote:
> True. You can't simply plug in something that throws where
> something nonthrowing existed previously. These are not drop-in
> replacements for unsigned integral types. Signed integrals
> exhibit undefined behavior on overflow (IIRC), so arguably they
> can be drop-in replacements for those.
I meant exactly this when I wrote about changing a type from int to something close to int yet different because it may throw.
-- Alexander Nasonov
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk