#include #include #include #include class ArithXcpt { public: ArithXcpt(char * msg) : err(msg) {} char * error_msg() { return err; } private: char *err; }; inline int ABS(int r) { return( r > 0 ? r : -r ); } int gcd(int a, int b) { if ( a==0 && b==0 ) throw(ArithXcpt("gcd: gcd(0,0) undefined")); a = ABS(a); b = ABS(b); if ( a == 0 ) return(b); // 0 is error value if ( b == 0 ) return(a); int t; while ( b > 0 ) { t = a % b; a = b; b = t; } return (a); } double mysqrt(double a) { double ans = sqrt(a); if ( errno > 0 && errno == EDOM ) throw(ArithXcpt("sqrt: domain error")); return(ans); } int mymain() { gcd(5,0); int a =17; a += INT_MAX; cerr << a << endl; mysqrt(-9); return(0); } int main() { try { return( mymain() ) ; } catch ( ArithXcpt& a ) { cerr << a.error_msg() << endl; return(1); } return(0); }