C++ Library containing a lot of needful things: Stack Trace, Command Line Parser, Resource Handling, Configuration Files, Unix Command Execution, Directories, Regular Expressions, Tokenizer, Function Trace, Standard Extensions.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

105 lines
4.6 KiB

/*! @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 <boost/shared_ptr.hpp>
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 <typename T> class shared_ptr: public boost::shared_ptr<T> {
public:
explicit shared_ptr(): boost::shared_ptr<T>() {}
explicit shared_ptr(T* p): boost::shared_ptr<T>(p) {}
};
// auto_ptr is deprecated in favour of unique_ptr, simulate unique_ptr
template <typename T> class unique_ptr: public std::auto_ptr<T> {
public:
explicit unique_ptr(): auto_ptr<T>() {}
explicit unique_ptr(T* p): auto_ptr<T>(p) {}
};
};
# else
# warning trying standard C++11 support
# include <memory>
# 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 <tr1/memory>
namespace std {
// there is no std::shared_ptr in apple, but
// std::tr1::shared_ptr in <tr1/memory>
template <typename T> class shared_ptr: public tr1::shared_ptr<T> {
public:
explicit shared_ptr(): tr1::shared_ptr<T>() {}
explicit shared_ptr(T* p): tr1::shared_ptr<T>(p) {}
};
}
# endif
# else
# include <memory>
# endif
#endif