/******************************************************************************/ /* */ /* FILE: MARCH.CPP */ /* */ /* Exceptional "Hello World" */ /* ========================= */ /* */ /* Compiled and tested with Visual C++ V6.0 */ /* */ /* V1.00 18-MAR-2000 P. Tellenbach http://www.heimetli.ch/ */ /* */ /******************************************************************************/ #include <iostream.h> #include <stdlib.h> #include <eh.h> void print() { cout << "Hello World" ; exit( 0 ) ; } class HelloWorld { public: HelloWorld() { set_terminate( print ) ; } ~HelloWorld() { throw HelloWorld() ; } } ; int main( void ) { throw HelloWorld() ; return 0 ; }
Update 11. March 2020
I had to make the obvious changes: replace iostream.h and add the using declaration.
es.h seems to be a Microsoft header, so I simply removed it.
After that, the program compiled and run. However the compiler warned that destructors are not supposed to throw any exceptions.
Because the main function throws a HelloWorld object, the throw in the destructor is not needed and I removed it from the class.
To further improve the code endl was added to the print function.
/******************************************************************************/ /* */ /* FILE: MARCH.CPP */ /* */ /* Exceptional "Hello World" */ /* ========================= */ /* */ /* Compiled and tested with Visual C++ V6.0 */ /* */ /* V1.00 18-MAR-2000 P. Tellenbach https://www.heimetli.ch/ */ /* */ /* Compiled and tested with g++ V8.3.0 */ /* */ /* V2.00 11-MAR-2020 P. Tellenbach https://www.heimetli.ch/ */ /* */ /******************************************************************************/ #include <iostream> #include <stdlib.h> using namespace std ; void print() { cout << "Hello World" << endl ; exit( 0 ) ; } class HelloWorld { public: HelloWorld() { set_terminate( print ) ; } } ; int main( void ) { throw HelloWorld() ; return 0 ; }
Update 31. March 2025
The program still compiles and runs.