Use unordered_xxx classes detected by configure

When using configure, use the same family of hash sets/maps when
building wxWidgets and the applications using it as doing otherwise
results in ABI incompatibility.
This commit is contained in:
Martin Koegler 2017-12-30 09:51:25 +00:00 committed by Vadim Zeitlin
parent 6c7aaa9e95
commit f6dddd9228

View File

@ -378,40 +378,47 @@ typedef short int WXTYPE;
#endif #endif
/* /*
Check for C++11 compilers, it is important to do it before the If using configure, stick to the options detected by it even if different
__has_include() checks because at least g++ 4.9.2+ __has_include() returns compiler options could result in detecting something different here, as it
true for C++11 headers which can't be compiled in non-C++11 mode. would cause ABI issues otherwise (see #18034).
*/ */
#if __cplusplus >= 201103L || wxCHECK_VISUALC_VERSION(10) #ifndef __WX_SETUP_H__
#ifndef HAVE_TYPE_TRAITS
#define HAVE_TYPE_TRAITS
#endif
#ifndef HAVE_STD_UNORDERED_MAP
#define HAVE_STD_UNORDERED_MAP
#endif
#ifndef HAVE_STD_UNORDERED_SET
#define HAVE_STD_UNORDERED_SET
#endif
#elif defined(__has_include)
/* /*
We're in non-C++11 mode here, so only test for pre-C++11 headers. As Check for C++11 compilers, it is important to do it before the
mentioned above, using __has_include() to test for C++11 would wrongly __has_include() checks because at least g++ 4.9.2+ __has_include() returns
detect them even though they can't be used in this case, don't do it. true for C++11 headers which can't be compiled in non-C++11 mode.
*/ */
#if !defined(HAVE_TR1_TYPE_TRAITS) && __has_include(<tr1/type_traits>) #if __cplusplus >= 201103L || wxCHECK_VISUALC_VERSION(10)
#define HAVE_TR1_TYPE_TRAITS #ifndef HAVE_TYPE_TRAITS
#endif #define HAVE_TYPE_TRAITS
#endif
#ifndef HAVE_STD_UNORDERED_MAP
#define HAVE_STD_UNORDERED_MAP
#endif
#ifndef HAVE_STD_UNORDERED_SET
#define HAVE_STD_UNORDERED_SET
#endif
#elif defined(__has_include)
/*
We're in non-C++11 mode here, so only test for pre-C++11 headers. As
mentioned above, using __has_include() to test for C++11 would wrongly
detect them even though they can't be used in this case, don't do it.
*/
#if !defined(HAVE_TR1_TYPE_TRAITS) && __has_include(<tr1/type_traits>)
#define HAVE_TR1_TYPE_TRAITS
#endif
#if !defined(HAVE_TR1_UNORDERED_MAP) && __has_include(<tr1/unordered_map>) #if !defined(HAVE_TR1_UNORDERED_MAP) && __has_include(<tr1/unordered_map>)
#define HAVE_TR1_UNORDERED_MAP #define HAVE_TR1_UNORDERED_MAP
#endif #endif
#if !defined(HAVE_TR1_UNORDERED_SET) && __has_include(<tr1/unordered_set>) #if !defined(HAVE_TR1_UNORDERED_SET) && __has_include(<tr1/unordered_set>)
#define HAVE_TR1_UNORDERED_SET #define HAVE_TR1_UNORDERED_SET
#endif #endif
#endif /* defined(__has_include) */ #endif /* defined(__has_include) */
#endif /* __cplusplus */ #endif /* __cplusplus */
#endif /* __WX_SETUP_H__ */
/* provide replacement for C99 va_copy() if the compiler doesn't have it */ /* provide replacement for C99 va_copy() if the compiler doesn't have it */