1 // 2 // detail/push_options.hpp 3 // ~~~~~~~~~~~~~~~~~~~~~~~ 4 // 5 // Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff dot com) 6 // 7 // Distributed under the Boost Software License, Version 1.0. (See accompanying 8 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 9 // 10 11 // No header guard 12 13 #if defined(__COMO__) 14 15 // Comeau C++ 16 17 #elif defined(__DMC__) 18 19 // Digital Mars C++ 20 21 #elif defined(__INTEL_COMPILER) || defined(__ICL) \ 22 || defined(__ICC) || defined(__ECC) 23 24 // Intel C++ 25 26 # if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4) 27 # if !defined(BOOST_ASIO_DISABLE_VISIBILITY) 28 # pragma GCC visibility push (default) 29 # endif // !defined(BOOST_ASIO_DISABLE_VISIBILITY) 30 # endif // (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4) 31 32 #elif defined(__clang__) 33 34 // Clang 35 36 # if defined(__OBJC__) 37 # if !defined(__APPLE_CC__) || (__APPLE_CC__ <= 1) 38 # if !defined(BOOST_ASIO_DISABLE_OBJC_WORKAROUND) 39 # if !defined(Protocol) && !defined(id) 40 # define Protocol cpp_Protocol 41 # define id cpp_id 42 # define BOOST_ASIO_OBJC_WORKAROUND 43 # endif 44 # endif 45 # endif 46 # endif 47 48 # if !defined(_WIN32) && !defined(__WIN32__) && !defined(WIN32) 49 # if !defined(BOOST_ASIO_DISABLE_VISIBILITY) 50 # pragma GCC visibility push (default) 51 # endif // !defined(BOOST_ASIO_DISABLE_VISIBILITY) 52 # endif // !defined(_WIN32) && !defined(__WIN32__) && !defined(WIN32) 53 54 # pragma GCC diagnostic push 55 # pragma GCC diagnostic ignored "-Wnon-virtual-dtor" 56 # if (__clang_major__ >= 6) 57 # pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" 58 # endif // (__clang_major__ >= 6) 59 60 #elif defined(__GNUC__) 61 62 // GNU C++ 63 64 # if defined(__MINGW32__) || defined(__CYGWIN__) 65 # pragma pack (push, 8) 66 # endif 67 68 # if defined(__OBJC__) 69 # if !defined(__APPLE_CC__) || (__APPLE_CC__ <= 1) 70 # if !defined(BOOST_ASIO_DISABLE_OBJC_WORKAROUND) 71 # if !defined(Protocol) && !defined(id) 72 # define Protocol cpp_Protocol 73 # define id cpp_id 74 # define BOOST_ASIO_OBJC_WORKAROUND 75 # endif 76 # endif 77 # endif 78 # endif 79 80 # if (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4) 81 # if !defined(BOOST_ASIO_DISABLE_VISIBILITY) 82 # pragma GCC visibility push (default) 83 # endif // !defined(BOOST_ASIO_DISABLE_VISIBILITY) 84 # endif // (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4) 85 86 # pragma GCC diagnostic push 87 # pragma GCC diagnostic ignored "-Wnon-virtual-dtor" 88 # if (__GNUC__ == 4 && __GNUC_MINOR__ >= 7) || (__GNUC__ > 4) 89 # pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" 90 # endif // (__GNUC__ == 4 && __GNUC_MINOR__ >= 7) || (__GNUC__ > 4) 91 # if (__GNUC__ >= 7) 92 # pragma GCC diagnostic ignored "-Wimplicit-fallthrough" 93 # endif // (__GNUC__ >= 7) 94 95 #elif defined(__KCC) 96 97 // Kai C++ 98 99 #elif defined(__sgi) 100 101 // SGI MIPSpro C++ 102 103 #elif defined(__DECCXX) 104 105 // Compaq Tru64 Unix cxx 106 107 #elif defined(__ghs) 108 109 // Greenhills C++ 110 111 #elif defined(__BORLANDC__) && !defined(__clang__) 112 113 // Borland C++ 114 115 # pragma option push -a8 -b -Ve- -Vx- -w-inl -vi- 116 # pragma nopushoptwarn 117 # pragma nopackwarning 118 # if !defined(__MT__) 119 # error Multithreaded RTL must be selected. 120 # endif // !defined(__MT__) 121 122 #elif defined(__MWERKS__) 123 124 // Metrowerks CodeWarrior 125 126 #elif defined(__SUNPRO_CC) 127 128 // Sun Workshop Compiler C++ 129 130 #elif defined(__HP_aCC) 131 132 // HP aCC 133 134 #elif defined(__MRC__) || defined(__SC__) 135 136 // MPW MrCpp or SCpp 137 138 #elif defined(__IBMCPP__) 139 140 // IBM Visual Age 141 142 #elif defined(_MSC_VER) 143 144 // Microsoft Visual C++ 145 // 146 // Must remain the last #elif since some other vendors (Metrowerks, for example) 147 // also #define _MSC_VER 148 149 # pragma warning (disable:4103) 150 # pragma warning (push) 151 # pragma warning (disable:4127) 152 # pragma warning (disable:4180) 153 # pragma warning (disable:4244) 154 # pragma warning (disable:4355) 155 # pragma warning (disable:4510) 156 # pragma warning (disable:4512) 157 # pragma warning (disable:4610) 158 # pragma warning (disable:4675) 159 # if (_MSC_VER < 1600) 160 // Visual Studio 2008 generates spurious warnings about unused parameters. 161 # pragma warning (disable:4100) 162 # endif // (_MSC_VER < 1600) 163 # if defined(_M_IX86) && defined(_Wp64) 164 // The /Wp64 option is broken. If you want to check 64 bit portability, use a 165 // 64 bit compiler! 166 # pragma warning (disable:4311) 167 # pragma warning (disable:4312) 168 # endif // defined(_M_IX86) && defined(_Wp64) 169 # pragma pack (push, 8) 170 // Note that if the /Og optimisation flag is enabled with MSVC6, the compiler 171 // has a tendency to incorrectly optimise away some calls to member template 172 // functions, even though those functions contain code that should not be 173 // optimised away! Therefore we will always disable this optimisation option 174 // for the MSVC6 compiler. 175 # if (_MSC_VER < 1300) 176 # pragma optimize ("g", off) 177 # endif 178 # if !defined(_MT) 179 # error Multithreaded RTL must be selected. 180 # endif // !defined(_MT) 181 182 # if defined(__cplusplus_cli) || defined(__cplusplus_winrt) 183 # if !defined(BOOST_ASIO_DISABLE_CLR_WORKAROUND) 184 # if !defined(generic) 185 # define generic cpp_generic 186 # define BOOST_ASIO_CLR_WORKAROUND 187 # endif 188 # endif 189 # endif 190 191 #endif 192