diff options
Diffstat (limited to 'test/compiler/StTerm-order/stterm-test.cc')
-rw-r--r-- | test/compiler/StTerm-order/stterm-test.cc | 117 |
1 files changed, 0 insertions, 117 deletions
diff --git a/test/compiler/StTerm-order/stterm-test.cc b/test/compiler/StTerm-order/stterm-test.cc deleted file mode 100644 index 0054f7d..0000000 --- a/test/compiler/StTerm-order/stterm-test.cc +++ /dev/null @@ -1,117 +0,0 @@ -/* - * The conversation with Matti Rintala on STLport forum 2005-08-24: - * - * Do you mean ISO/IEC 14882 3.6.3 [basic.start.term]? - * - * Yes. "Destructors (12.4) for initialized objects of static storage duration - * (declared at block scope or at namespace scope) are called as a result - * of returning from main and as a result of calling exit (18.3). These objects - * are destroyed in the reverse order of the completion of their constructor - * or of the completion of their dynamic initialization." - * - * I found a confirmation on the web that gcc may not strictly conform - * to this behaviour in certains cases unless -fuse-cxa-atexit is used. - * - * Test below give (without -fuse-cxa-atexit) - -Init::Init() -Init::use_it -It ctor done <-- 0 -Init::use_it done -Init ctor done <-- 1 -Init2 ctor done <-- 2 -It dtor done <-- 0 -Init2 dtor done <-- 2 -Init dtor done <-- 1 - - - * but should: - -Init::Init() -Init::use_it -It ctor done <-- 0 -Init::use_it done -Init ctor done <-- 1 -Init2 ctor done <-- 2 -Init2 dtor done <-- 2 -Init dtor done <-- 1 -It dtor done <-- 0 - - - */ -#include <stdio.h> - -using namespace std; - -class Init -{ - public: - Init(); - ~Init(); - - static void use_it(); -}; - -class Init2 -{ - public: - Init2(); - ~Init2(); - -}; - -static Init init; -static Init2 init2; - -class It -{ - public: - It(); - ~It(); -}; - -Init::Init() -{ - printf( "Init::Init()\n" ); - use_it(); - printf( "Init ctor done\n" ); -} - -Init::~Init() -{ - printf( "Init dtor done\n" ); -} - -void Init::use_it() -{ - printf( "Init::use_it\n" ); - - static It it; - - printf( "Init::use_it done\n" ); -} - -Init2::Init2() -{ - printf( "Init2 ctor done\n" ); -} - -Init2::~Init2() -{ - printf( "Init2 dtor done\n" ); -} - -It::It() -{ - printf( "It ctor done\n" ); -} - -It::~It() -{ - printf( "It dtor done\n" ); -} - -int main() -{ - return 0; -} |