![]() |
Safe Numerics |
This type holds a signed or unsigned integer in the closed range
[MIN, MAX]. A safe_signed_range<MIN, MAX, PP, EP> or
safe_unsigned_range<MIN, MAX, PP, EP> can be used
anywhere an arithmetic type is permitted. Any expression which uses either
of these types is guarenteed to return an arithmetically correct value or
trap in some way.
PP |
Promotion Pollicy. A type which specifes the result type of an expression using safe types. |
EP |
Exception Policy. A type containing members which are called when a correct result cannot be returned |
| Parameter | Requirements | Description |
|---|---|---|
MIN |
must be non-integer literal | The minimum non-negative integer value that this type may hold |
MAX |
must be a non-negative literal | The maximum non-negative integer value that this type may hold |
| MIN <= MAX | must be a valid closed range | |
PP |
PromotionPolicy<PP> | Default value is boost::numeric::native |
EP |
Exception Policy<EP> | Default value is boost::throw_exception |
Implements all expressions and only those expressions defined by the SafeNumeric type requirements. This, the result type of such an expression will be another safe type. The actual type of the result of such an expression will depend upon the specific promotion policy template parameter.
#include <safe/numeric/safe_range.hpp>
void f(boost::numeric::safe_unsigned_range<7, 24> i){
// since the range is included in [0,255], the underlying type of i
// will be an unsigned char.
i = 0; // throws out_of_range exception
i = 9; // ok
i *= 9; // throws out_of_range exception
i = -1; // throws out_of_range exception
std::uint8_t j = 4;
auto k = i + j;
// These types use default promotion policy so standard C++ type promotion rules
// will be used in evaluating expressions. C++ type promotion rules mandate
// that the result of k = i + j when both are unsigned char types, will be another
// unsigned char type.
}