#include <list> /* required, to expose allocator */ #include <stdexcept> #include <stdio.h> using namespace std; struct BigStruct { char _data[4096]; }; void bad_alloc_test() { typedef allocator<BigStruct> BigStructAllocType; BigStructAllocType bigStructAlloc; try { //Lets try to allocate almost 4096 Go (on most of the platforms) of memory: BigStructAllocType::pointer pbigStruct = bigStructAlloc.allocate(1024 * 1024 * 1024); // CPPUNIT_ASSERT( pbigStruct != 0 && "Allocation failed but no exception thrown" ); } catch (bad_alloc const&) { printf( "Ok\n" ); } catch (...) { //We shouldn't be there: // CPPUNIT_ASSERT( false && "Not bad_alloc exception thrown." ); } } void bad_alloc_test1() { try { allocator<BigStruct> all; BigStruct *bs = all.allocate(1024*1024*1024); // throw bad_alloc(); } catch ( bad_alloc const & ) { printf( "I am here\n" ); } catch ( ... ) { } } int main() { bad_alloc_test(); #if 0 try { throw bad_alloc(); } catch ( bad_alloc& ) { } catch ( ... ) { } #endif return 0; }