/* ACC -- Automatic Compiler Configuration Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer All Rights Reserved. This software is a copyrighted work licensed under the terms of the GNU General Public License. Please consult the file "ACC_LICENSE" for details. Markus F.X.J. Oberhumer http://www.oberhumer.com/ */ #ifndef __ACC_CXX_H_INCLUDED #define __ACC_CXX_H_INCLUDED 1 #if defined(__cplusplus) /************************************************************************* // exception specification // ACC_CXX_NOTHROW **************************************************************************/ #if defined(ACC_CXX_NOTHROW) #elif (ACC_CC_GNUC && (ACC_CC_GNUC < 0x020800ul)) #elif (ACC_CC_BORLANDC && (__BORLANDC__ < 0x0450)) #elif (ACC_CC_HIGHC) #elif (ACC_CC_MSC && (_MSC_VER < 1100)) #elif (ACC_CC_NDPC) #elif (ACC_CC_TURBOC) #elif (ACC_CC_WATCOMC && !defined(_CPPUNWIND)) #elif (ACC_CC_ZORTECHC) #else # define ACC_CXX_NOTHROW throw() #endif #if !defined(ACC_CXX_NOTHROW) # define ACC_CXX_NOTHROW #endif /************************************************************************* // disable dynamic allocation of an object - private helpers // __ACC_CXX_DO_NEW // __ACC_CXX_DO_DELETE **************************************************************************/ #if defined(__ACC_CXX_DO_NEW) #elif (ACC_CC_NDPC || ACC_CC_PGI) # define __ACC_CXX_DO_NEW { return 0; } #else # define __ACC_CXX_DO_NEW ; #endif /* need an implementation in case a class has virtual members */ #if defined(__ACC_CXX_DO_DELETE) #elif (ACC_CC_BORLANDC || ACC_CC_TURBOC) # define __ACC_CXX_DO_DELETE { } #else # define __ACC_CXX_DO_DELETE ACC_CXX_NOTHROW { } #endif /************************************************************************* // disable dynamic allocation of an object // ACC_CXX_DISABLE_NEW_DELETE **************************************************************************/ /* #undef __ACC_CXX_HAVE_ARRAY_NEW #undef __ACC_CXX_HAVE_PLACEMENT_NEW #undef __ACC_CXX_HAVE_PLACEMENT_DELETE */ #if (ACC_CC_BORLANDC && (__BORLANDC__ < 0x0450)) #elif (ACC_CC_MSC && ACC_MM_HUGE) # define ACC_CXX_DISABLE_NEW_DELETE private: #elif (ACC_CC_MSC && (_MSC_VER < 1100)) #elif (ACC_CC_NDPC) #elif (ACC_CC_SYMANTECC || ACC_CC_ZORTECHC) #elif (ACC_CC_TURBOC) #elif (ACC_CC_WATCOMC && (__WATCOMC__ < 1100)) #else # define __ACC_CXX_HAVE_ARRAY_NEW 1 #endif #if (__ACC_CXX_HAVE_ARRAY_NEW) # define __ACC_CXX_HAVE_PLACEMENT_NEW 1 #endif #if (__ACC_CXX_HAVE_PLACEMENT_NEW) # if (ACC_CC_GNUC >= 0x030000ul) # define __ACC_CXX_HAVE_PLACEMENT_DELETE 1 # elif (ACC_CC_INTELC) # define __ACC_CXX_HAVE_PLACEMENT_DELETE 1 # elif (ACC_CC_MSC && (_MSC_VER >= 1200)) # define __ACC_CXX_HAVE_PLACEMENT_DELETE 1 # elif (ACC_CC_PGI) # define __ACC_CXX_HAVE_PLACEMENT_DELETE 1 # endif #endif #if defined(ACC_CXX_DISABLE_NEW_DELETE) #elif defined(new) || defined(delete) # define ACC_CXX_DISABLE_NEW_DELETE private: #elif (ACC_CC_GNUC && (ACC_CC_GNUC < 0x025b00ul)) # define ACC_CXX_DISABLE_NEW_DELETE private: #elif (ACC_CC_HIGHC) # define ACC_CXX_DISABLE_NEW_DELETE private: #elif !defined(__ACC_CXX_HAVE_ARRAY_NEW) /* for old compilers use `protected' instead of `private' */ # define ACC_CXX_DISABLE_NEW_DELETE \ protected: static void operator delete(void*) __ACC_CXX_DO_DELETE \ protected: static void* operator new(size_t) __ACC_CXX_DO_NEW \ private: #else # define ACC_CXX_DISABLE_NEW_DELETE \ protected: static void operator delete(void*) __ACC_CXX_DO_DELETE \ static void operator delete[](void*) __ACC_CXX_DO_DELETE \ private: static void* operator new(size_t) __ACC_CXX_DO_NEW \ static void* operator new[](size_t) __ACC_CXX_DO_NEW #endif /************************************************************************* // Assist the compiler by defining a unique location for vtables and RTTI. // Every class which has virtual member functions or derives from a class // with virtual members should put this macro at the very top of its // class declaration. // ACC_CXX_TRIGGER_FUNCTION **************************************************************************/ #if defined(ACC_CXX_TRIGGER_FUNCTION) #else # define ACC_CXX_TRIGGER_FUNCTION \ protected: virtual const void* acc_cxx_trigger_function() const; \ private: #endif #if defined(ACC_CXX_TRIGGER_FUNCTION_IMPL) #else # define ACC_CXX_TRIGGER_FUNCTION_IMPL(klass) \ const void* klass::acc_cxx_trigger_function() const { return 0; } #endif #endif /* __cplusplus */ #endif /* already included */ /* vi:ts=4:et */