// new standard header for Microsoft #include using namespace std; #pragma once #ifndef _NEWER_ #define _NEWER_ #ifndef RC_INVOKED #include #pragma pack(push,_CRT_PACKING) #pragma warning(push,3) // #pragma push_macro("new") // #undef new #if !defined(__CRTDECL) #if defined(_M_CEE_PURE) #define __CRTDECL #else #define __CRTDECL __cdecl #endif #endif _STD_BEGIN // SUPPORT TYPES #if !defined(_INC_NEW) || !defined(_MSC_EXTENSIONS) // handler for operator new failures #ifdef _M_CEE_PURE typedef void (__clrcall * new_handler) (); #else typedef void (__cdecl * new_handler) (); #endif #endif /* !defined(_INC_NEW) || !defined(_MSC_EXTENSIONS) */ #ifndef __NOTHROW_T_DEFINED struct nothrow_t { // placement new tag type to suppress exceptions }; extern const nothrow_t nothrow; // constant for placement new tag #endif /* __NOTHROW_T_DEFINED */ // FUNCTION AND OBJECT DECLARATIONS _CRTIMP2 new_handler __cdecl set_new_handler(_In_opt_ new_handler) _THROW0(); // establish alternate new handler _STD_END // new AND delete DECLARATIONS (NB: NOT IN std) void __CRTDECL operator delete(void *) _THROW0(); #pragma warning (suppress: 4985) _Ret_bytecap_(_Size) void *__CRTDECL operator new(size_t _Size) _THROW1(_STD bad_alloc); #ifndef __PLACEMENT_NEW_INLINE #define __PLACEMENT_NEW_INLINE inline void *__CRTDECL operator new(size_t, void *_Where) _THROW0() { // construct array with placement at _Where cout << "New!\n"; return (_Where); } inline void __CRTDECL operator delete(void *, void *) _THROW0() { // delete if placement new fails cout << "Delete!\n"; } #endif /* __PLACEMENT_NEW_INLINE */ #ifndef __PLACEMENT_VEC_NEW_INLINE #define __PLACEMENT_VEC_NEW_INLINE inline void *__CRTDECL operator new[](size_t, void *_Where) _THROW0() { // construct array with placement at _Where cout << "New!\n"; return (_Where); } inline void __CRTDECL operator delete[](void *, void *) _THROW0() { // delete if placement array new fails cout << "Delete!\n"; } #endif /* __PLACEMENT_VEC_NEW_INLINE */ void __CRTDECL operator delete[](void *) _THROW0(); // delete allocated array _Ret_bytecap_(_Size) void *__CRTDECL operator new[](size_t _Size) _THROW1(_STD bad_alloc); // allocate array or throw exception #ifndef __NOTHROW_T_DEFINED #define __NOTHROW_T_DEFINED _Ret_opt_bytecap_(_Size) void *__CRTDECL operator new(size_t _Size, const _STD nothrow_t&) _THROW0(); _Ret_opt_bytecap_(_Size) void *__CRTDECL operator new[](size_t _Size, const _STD nothrow_t&) _THROW0(); // allocate array or return null pointer void __CRTDECL operator delete(void *, const _STD nothrow_t&) _THROW0(); // delete if nothrow new fails -- REPLACEABLE void __CRTDECL operator delete[](void *, const _STD nothrow_t&) _THROW0(); // delete if nothrow array new fails -- REPLACEABLE #endif /* __NOTHROW_T_DEFINED */ #if !defined(_INC_NEW) || !defined(_MSC_EXTENSIONS) using _STD new_handler; #endif /* !defined(_INC_NEW) || !defined(_MSC_EXTENSIONS) */ #pragma pop_macro("new") #pragma warning(pop) #pragma pack(pop) #endif /* RC_INVOKED */ #endif /* _NEWER_ */ /* * Copyright (c) 1992-2007 by P.J. Plauger. ALL RIGHTS RESERVED. * Consult your license regarding permissions and restrictions. V5.03:0009 */