Boost logo

Boost :

Subject: Re: [boost] [integer] Type-safe and bounded integers with compile-time checking
From: Leif Linderstam (leif.ls_at_[hidden])
Date: 2011-09-05 08:29:55

Mathias Gaunard skrev 2011-09-05 11:30:
> On 09/04/2011 09:16 PM, Leif Linderstam wrote:
>> What I have not found yet though is a library that checks bounds at
>> compile time. Me personally I would like to have the compiler check as
>> much as possible. For instance, the compiler would complain about an
>> assignment if the target's range is not a superset of the source's,
>> unless
>> an explicit conversion is made.
>> Does anyone know of a library supporting this?
> How would addition and multiplication work?

They produce new ranges, e.g. for the addition A + B the range of the
result is [ A_low + B_low, A_high + B_high ] where A_low is the lower
bound of A's range, and so on.

The result of all operators must have a valid range, which indeed has some
fundamental implications.

First, all bit operators are ruled out because if it is at all possible to
compute a new range, the result is probably not that interesting. But the
actual bit pattern of an integer is actually just a representation, one of
potentially many although in practice it is probably hard to find anything
but two-complements representation today. For bit patterns, use a bit
pattern type.

Second, assignment of a value back to one of the operands, i.e. A = A + B,
will invariably require the use of an explicit range conversion. This
means that the compound assignments and increment/decrement operators, if
at all supported, must do an implicit range conversion. Range conversions,
explicit or implicit, must do a dynamic range check so these operations
will not be statically checked.

Leif Linderstam

Boost list run by bdawes at, gregod at, cpdaniel at, john at