#include #include #include using namespace std; using namespace boost::safe_numerics; void f(const unsigned int & x, const int8_t & y){ cout << x * y << endl; } void safe_f( const safe & x, const safe & y ){ cout << x * y << endl; } int main(){ cout << "example 4: "; cout << "mixing types produces surprising results" << endl; try { std::cout << "Not using safe numerics" << std::endl; // problem: mixing types produces surprising results. f(100, 100); // works as expected f(100, -100); // wrong result - unnoticed cout << "error NOT detected!" << endl;; } catch(const std::exception & e){ // never arrive here cout << "error detected:" << e.what() << endl;; } try { // solution: use safe types std::cout << "Using safe numerics" << std::endl; safe_f(100, 100); // works as expected safe_f(100, -100); // throw error cout << "error NOT detected!" << endl;; } catch(const std::exception & e){ cout << "error detected:" << e.what() << endl;; } return 0; }