/*! @file @id $Id$ */ // 1 2 3 4 5 6 7 8 // 45678901234567890123456789012345678901234567890123456789012345678901234567890 #ifndef __MRW__CHECKCXX11__ #define __MRW__CHECKCXX11__ // check if code is compiled with a new C++11 compiler // otherwise there is a fallback wich makes everything much more compliacted # ifndef MRW__OLD_PRE11_COMPILER # if __cplusplus < 201103L # if __cplusplus==1 # if __APPLE__ # if MAC_OS_X_PACKAGE_VERSION_MIN_REQUIRED < MAC_OS_X_PACKAGE_VERSION_10_9 /// Code is compiled with old non C++11 standard compliant compiler /** There are workarounds for old non C++11 compatible compilers. These workarounds are deprecated, but will remain until most compilers fully support C++11. So this workaround will be removed in future releases, when support for C++11 is more common. Only rely on this workaround, if you really have to. Mac gcc is even worse than on other systems. */ # define MRW__OLD_PRE11_COMPILER # warning you need a C++11 compliant compiler, on gcc: add -std=c++11 # warning emulating C++11 - this changes the way you use the library # warning this is deprecated and will be removed in future releases # warning refere to the library documentation for more details # endif # else // __cplusplus==1 is a known bug in gcc 4.6.3 # warning your compiler has a know bug, please upgrade to gcc >= 4.7 # warning see __cplusplus in http://gcc.gnu.org/gcc-4.7/changes.html # endif # else /// Code is compiled with an old non C++11 standard compliant compiler /** There are workarounds for old non C++11 compatible compilers. These workarounds are deprecated, but will remain until most compilers fully support C++11. So this workaround will be removed in future releases, when support for C++11 is more common. Only rely on this workaround, if you really have to. */ # define MRW__OLD_PRE11_COMPILER # warning you need a C++11 compliant compiler, on gcc: add -std=c++11 # warning emulating C++11 - this changes the way you use the library # warning this is deprecated and will be removed in future releases # warning refere to the library documentation for more details # endif # endif # ifdef MRW__OLD_PRE11_COMPILER # if __cplusplus<200300L # warning emulating C++11 support using boost # include namespace std { // there is no std::shared_ptr in pre C++11 compilers, so we use the // one from the boost library as a 1:1 replacement template class shared_ptr: public boost::shared_ptr { public: explicit shared_ptr(): boost::shared_ptr() {} explicit shared_ptr(T* p): boost::shared_ptr(p) {} }; // auto_ptr is deprecated in favour of unique_ptr, simulate unique_ptr template class unique_ptr: public std::auto_ptr { public: explicit unique_ptr(): auto_ptr() {} explicit unique_ptr(T* p): auto_ptr(p) {} }; }; # else # warning trying standard C++11 support # include # endif # elif __APPLE__ && MAC_OS_X_PACKAGE_VERSION_MIN_REQUIRED < MAC_OS_X_PACKAGE_VERSION_10_9 /// Code is compiled with an old non C++11 standard compliant compiler /** There are workarounds for old non C++11 compatible compilers. These workarounds are deprecated, but will remain until most compilers fully support C++11. So this workaround will be removed in future releases, when support for C++11 is more common. Only rely on this workaround, if you really have to. */ # define MRW__OLD_PRE11_COMPILER # warning you need a C++11 compliant compiler, on gcc: add -std=c++11 # warning emulating C++11 - this changes the way you use the library # warning this is deprecated and will be removed in future releases # warning refere to the library documentation for more details # warning special workaround for apple # include namespace std { // there is no std::shared_ptr in apple, but // std::tr1::shared_ptr in template class shared_ptr: public tr1::shared_ptr { public: explicit shared_ptr(): tr1::shared_ptr() {} explicit shared_ptr(T* p): tr1::shared_ptr(p) {} }; } # endif # else # include # endif #endif