/*! @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__
/// 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
# 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
# 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
# endif
# elif __APPLE__
/// 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
# endif