1 ////////////////////////////////////////////////////////////////////////////// 2 // 3 // (C) Copyright Ion Gaztanaga 2005-2013. Distributed under the Boost 4 // Software License, Version 1.0. (See accompanying file 5 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 // 7 // See http://www.boost.org/libs/container for documentation. 8 // 9 ////////////////////////////////////////////////////////////////////////////// 10 11 #ifndef BOOST_CONTAINER_DETAIL_WORKAROUND_HPP 12 #define BOOST_CONTAINER_DETAIL_WORKAROUND_HPP 13 14 #ifndef BOOST_CONFIG_HPP 15 # include <boost/config.hpp> 16 #endif 17 18 #if defined(BOOST_HAS_PRAGMA_ONCE) 19 # pragma once 20 #endif 21 22 #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)\ 23 && !defined(BOOST_INTERPROCESS_DISABLE_VARIADIC_TMPL) 24 #define BOOST_CONTAINER_PERFECT_FORWARDING 25 #endif 26 27 #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && defined(__GXX_EXPERIMENTAL_CXX0X__)\ 28 && (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__ < 40700) 29 #define BOOST_CONTAINER_UNIMPLEMENTED_PACK_EXPANSION_TO_FIXED_LIST 30 #endif 31 32 #if defined(BOOST_GCC_VERSION) 33 # if (BOOST_GCC_VERSION < 40700) || !defined(BOOST_GCC_CXX11) 34 # define BOOST_CONTAINER_NO_CXX11_DELEGATING_CONSTRUCTORS 35 # endif 36 #elif defined(BOOST_MSVC) 37 # if _MSC_FULL_VER < 180020827 38 # define BOOST_CONTAINER_NO_CXX11_DELEGATING_CONSTRUCTORS 39 # endif 40 #elif defined(BOOST_CLANG) 41 # if !__has_feature(cxx_delegating_constructors) 42 # define BOOST_CONTAINER_NO_CXX11_DELEGATING_CONSTRUCTORS 43 # endif 44 #endif 45 46 #if !defined(BOOST_FALLTHOUGH) 47 #define BOOST_CONTAINER_FALLTHOUGH 48 #else 49 #define BOOST_CONTAINER_FALLTHOUGH BOOST_FALLTHOUGH; 50 #endif 51 52 #if defined(BOOST_MSVC) && (_MSC_VER < 1400) 53 #define BOOST_CONTAINER_TEMPLATED_CONVERSION_OPERATOR_BROKEN 54 #endif 55 56 #if !defined(BOOST_NO_CXX11_HDR_TUPLE) || (defined(BOOST_MSVC) && (BOOST_MSVC == 1700 || BOOST_MSVC == 1600)) 57 #define BOOST_CONTAINER_PAIR_TEST_HAS_HEADER_TUPLE 58 #endif 59 60 //Macros for documentation purposes. For code, expands to the argument 61 #define BOOST_CONTAINER_IMPDEF(TYPE) TYPE 62 #define BOOST_CONTAINER_SEEDOC(TYPE) TYPE 63 64 //Macros for memset optimization. In most platforms 65 //memsetting pointers and floatings is safe and faster. 66 // 67 //If your platform does not offer these guarantees 68 //define these to value zero. 69 #ifndef BOOST_CONTAINER_MEMZEROED_FLOATING_POINT_IS_NOT_ZERO 70 #define BOOST_CONTAINER_MEMZEROED_FLOATING_POINT_IS_ZERO 1 71 #endif 72 73 #ifndef BOOST_CONTAINER_MEMZEROED_POINTER_IS_NOT_NULL 74 #define BOOST_CONTAINER_MEMZEROED_POINTER_IS_NULL 75 #endif 76 77 #define BOOST_CONTAINER_DOC1ST(TYPE1, TYPE2) TYPE2 78 #define BOOST_CONTAINER_I , 79 #define BOOST_CONTAINER_DOCIGN(T) T 80 #define BOOST_CONTAINER_DOCONLY(T) 81 82 /* 83 we need to import/export our code only if the user has specifically 84 asked for it by defining either BOOST_ALL_DYN_LINK if they want all boost 85 libraries to be dynamically linked, or BOOST_CONTAINER_DYN_LINK 86 if they want just this one to be dynamically liked: 87 */ 88 #if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_CONTAINER_DYN_LINK) 89 90 /* export if this is our own source, otherwise import: */ 91 #ifdef BOOST_CONTAINER_SOURCE 92 # define BOOST_CONTAINER_DECL BOOST_SYMBOL_EXPORT 93 #else 94 # define BOOST_CONTAINER_DECL BOOST_SYMBOL_IMPORT 95 96 #endif /* BOOST_CONTAINER_SOURCE */ 97 #else 98 #define BOOST_CONTAINER_DECL 99 #endif /* DYN_LINK */ 100 101 //#define BOOST_CONTAINER_DISABLE_FORCEINLINE 102 103 #if defined(BOOST_CONTAINER_DISABLE_FORCEINLINE) 104 #define BOOST_CONTAINER_FORCEINLINE inline 105 #elif defined(BOOST_CONTAINER_FORCEINLINE_IS_BOOST_FORCELINE) 106 #define BOOST_CONTAINER_FORCEINLINE BOOST_FORCEINLINE 107 #elif defined(BOOST_MSVC) && defined(_DEBUG) 108 //"__forceinline" and MSVC seems to have some bugs in debug mode 109 #define BOOST_CONTAINER_FORCEINLINE inline 110 #elif defined(__GNUC__) && ((__GNUC__ < 4) || (__GNUC__ == 4 && (__GNUC_MINOR__ < 5))) 111 //Older GCCs have problems with forceinline 112 #define BOOST_CONTAINER_FORCEINLINE inline 113 #else 114 #define BOOST_CONTAINER_FORCEINLINE BOOST_FORCEINLINE 115 #endif 116 117 #endif //#ifndef BOOST_CONTAINER_DETAIL_WORKAROUND_HPP 118