github.com/searKing/golang/go@v1.2.117/os/signal/cgo/include/boost/config/compiler/gcc.hpp (about) 1 // (C) Copyright John Maddock 2001 - 2003. 2 // (C) Copyright Darin Adler 2001 - 2002. 3 // (C) Copyright Jens Maurer 2001 - 2002. 4 // (C) Copyright Beman Dawes 2001 - 2003. 5 // (C) Copyright Douglas Gregor 2002. 6 // (C) Copyright David Abrahams 2002 - 2003. 7 // (C) Copyright Synge Todo 2003. 8 // Use, modification and distribution are subject to the 9 // Boost Software License, Version 1.0. (See accompanying file 10 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 11 12 // See http://www.boost.org for most recent version. 13 14 // GNU C++ compiler setup. 15 16 // 17 // Define BOOST_GCC so we know this is "real" GCC and not some pretender: 18 // 19 #define BOOST_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) 20 #if !defined(__CUDACC__) 21 #define BOOST_GCC BOOST_GCC_VERSION 22 #endif 23 24 #if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L) 25 # define BOOST_GCC_CXX11 26 #endif 27 28 #if __GNUC__ == 3 29 # if defined (__PATHSCALE__) 30 # define BOOST_NO_TWO_PHASE_NAME_LOOKUP 31 # define BOOST_NO_IS_ABSTRACT 32 # endif 33 34 # if __GNUC_MINOR__ < 4 35 # define BOOST_NO_IS_ABSTRACT 36 # endif 37 # define BOOST_NO_CXX11_EXTERN_TEMPLATE 38 #endif 39 #if __GNUC__ < 4 40 // 41 // All problems to gcc-3.x and earlier here: 42 // 43 #define BOOST_NO_TWO_PHASE_NAME_LOOKUP 44 # ifdef __OPEN64__ 45 # define BOOST_NO_IS_ABSTRACT 46 # endif 47 #endif 48 49 // GCC prior to 3.4 had #pragma once too but it didn't work well with filesystem links 50 #if BOOST_GCC_VERSION >= 30400 51 #define BOOST_HAS_PRAGMA_ONCE 52 #endif 53 54 #if BOOST_GCC_VERSION < 40400 55 // Previous versions of GCC did not completely implement value-initialization: 56 // GCC Bug 30111, "Value-initialization of POD base class doesn't initialize 57 // members", reported by Jonathan Wakely in 2006, 58 // http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30111 (fixed for GCC 4.4) 59 // GCC Bug 33916, "Default constructor fails to initialize array members", 60 // reported by Michael Elizabeth Chastain in 2007, 61 // http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33916 (fixed for GCC 4.2.4) 62 // See also: http://www.boost.org/libs/utility/value_init.htm#compiler_issues 63 #define BOOST_NO_COMPLETE_VALUE_INITIALIZATION 64 #endif 65 66 #if !defined(__EXCEPTIONS) && !defined(BOOST_NO_EXCEPTIONS) 67 # define BOOST_NO_EXCEPTIONS 68 #endif 69 70 71 // 72 // Threading support: Turn this on unconditionally here (except for 73 // those platforms where we can know for sure). It will get turned off again 74 // later if no threading API is detected. 75 // 76 #if !defined(__MINGW32__) && !defined(linux) && !defined(__linux) && !defined(__linux__) 77 # define BOOST_HAS_THREADS 78 #endif 79 80 // 81 // gcc has "long long" 82 // Except on Darwin with standard compliance enabled (-pedantic) 83 // Apple gcc helpfully defines this macro we can query 84 // 85 #if !defined(__DARWIN_NO_LONG_LONG) 86 # define BOOST_HAS_LONG_LONG 87 #endif 88 89 // 90 // gcc implements the named return value optimization since version 3.1 91 // 92 #define BOOST_HAS_NRVO 93 94 // Branch prediction hints 95 #define BOOST_LIKELY(x) __builtin_expect(x, 1) 96 #define BOOST_UNLIKELY(x) __builtin_expect(x, 0) 97 98 // 99 // Dynamic shared object (DSO) and dynamic-link library (DLL) support 100 // 101 #if __GNUC__ >= 4 102 # if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(__CYGWIN__) 103 // All Win32 development environments, including 64-bit Windows and MinGW, define 104 // _WIN32 or one of its variant spellings. Note that Cygwin is a POSIX environment, 105 // so does not define _WIN32 or its variants, but still supports dllexport/dllimport. 106 # define BOOST_HAS_DECLSPEC 107 # define BOOST_SYMBOL_EXPORT __attribute__((__dllexport__)) 108 # define BOOST_SYMBOL_IMPORT __attribute__((__dllimport__)) 109 # else 110 # define BOOST_SYMBOL_EXPORT __attribute__((__visibility__("default"))) 111 # define BOOST_SYMBOL_IMPORT 112 # endif 113 # define BOOST_SYMBOL_VISIBLE __attribute__((__visibility__("default"))) 114 #else 115 // config/platform/win32.hpp will define BOOST_SYMBOL_EXPORT, etc., unless already defined 116 # define BOOST_SYMBOL_EXPORT 117 #endif 118 119 // 120 // RTTI and typeinfo detection is possible post gcc-4.3: 121 // 122 #if BOOST_GCC_VERSION > 40300 123 # ifndef __GXX_RTTI 124 # ifndef BOOST_NO_TYPEID 125 # define BOOST_NO_TYPEID 126 # endif 127 # ifndef BOOST_NO_RTTI 128 # define BOOST_NO_RTTI 129 # endif 130 # endif 131 #endif 132 133 // 134 // Recent GCC versions have __int128 when in 64-bit mode. 135 // 136 // We disable this if the compiler is really nvcc with C++03 as it 137 // doesn't actually support __int128 as of CUDA_VERSION=7500 138 // even though it defines __SIZEOF_INT128__. 139 // See https://svn.boost.org/trac/boost/ticket/8048 140 // https://svn.boost.org/trac/boost/ticket/11852 141 // Only re-enable this for nvcc if you're absolutely sure 142 // of the circumstances under which it's supported: 143 // 144 #if defined(__CUDACC__) 145 # if defined(BOOST_GCC_CXX11) 146 # define BOOST_NVCC_CXX11 147 # else 148 # define BOOST_NVCC_CXX03 149 # endif 150 #endif 151 152 #if defined(__SIZEOF_INT128__) && !defined(BOOST_NVCC_CXX03) 153 # define BOOST_HAS_INT128 154 #endif 155 // 156 // Recent GCC versions have a __float128 native type, we need to 157 // include a std lib header to detect this - not ideal, but we'll 158 // be including <cstddef> later anyway when we select the std lib. 159 // 160 // Nevertheless, as of CUDA 7.5, using __float128 with the host 161 // compiler in pre-C++11 mode is still not supported. 162 // See https://svn.boost.org/trac/boost/ticket/11852 163 // 164 #ifdef __cplusplus 165 #include <cstddef> 166 #else 167 #include <stddef.h> 168 #endif 169 #if defined(_GLIBCXX_USE_FLOAT128) && !defined(__STRICT_ANSI__) && !defined(BOOST_NVCC_CXX03) 170 # define BOOST_HAS_FLOAT128 171 #endif 172 173 // C++0x features in 4.3.n and later 174 // 175 #if (BOOST_GCC_VERSION >= 40300) && defined(BOOST_GCC_CXX11) 176 // C++0x features are only enabled when -std=c++0x or -std=gnu++0x are 177 // passed on the command line, which in turn defines 178 // __GXX_EXPERIMENTAL_CXX0X__. 179 # define BOOST_HAS_DECLTYPE 180 # define BOOST_HAS_RVALUE_REFS 181 # define BOOST_HAS_STATIC_ASSERT 182 # define BOOST_HAS_VARIADIC_TMPL 183 #else 184 # define BOOST_NO_CXX11_DECLTYPE 185 # define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS 186 # define BOOST_NO_CXX11_RVALUE_REFERENCES 187 # define BOOST_NO_CXX11_STATIC_ASSERT 188 #endif 189 190 // C++0x features in 4.4.n and later 191 // 192 #if (BOOST_GCC_VERSION < 40400) || !defined(BOOST_GCC_CXX11) 193 # define BOOST_NO_CXX11_AUTO_DECLARATIONS 194 # define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS 195 # define BOOST_NO_CXX11_CHAR16_T 196 # define BOOST_NO_CXX11_CHAR32_T 197 # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST 198 # define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS 199 # define BOOST_NO_CXX11_DELETED_FUNCTIONS 200 # define BOOST_NO_CXX11_TRAILING_RESULT_TYPES 201 # define BOOST_NO_CXX11_INLINE_NAMESPACES 202 # define BOOST_NO_CXX11_VARIADIC_TEMPLATES 203 #endif 204 205 #if BOOST_GCC_VERSION < 40500 206 # define BOOST_NO_SFINAE_EXPR 207 #endif 208 209 // GCC 4.5 forbids declaration of defaulted functions in private or protected sections 210 #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ == 5) || !defined(BOOST_GCC_CXX11) 211 # define BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS 212 #endif 213 214 // C++0x features in 4.5.0 and later 215 // 216 #if (BOOST_GCC_VERSION < 40500) || !defined(BOOST_GCC_CXX11) 217 # define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS 218 # define BOOST_NO_CXX11_LAMBDAS 219 # define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS 220 # define BOOST_NO_CXX11_RAW_LITERALS 221 # define BOOST_NO_CXX11_UNICODE_LITERALS 222 # define BOOST_NO_CXX11_ALIGNOF 223 #endif 224 225 // C++0x features in 4.5.1 and later 226 // 227 #if (BOOST_GCC_VERSION < 40501) || !defined(BOOST_GCC_CXX11) 228 // scoped enums have a serious bug in 4.4.0, so define BOOST_NO_CXX11_SCOPED_ENUMS before 4.5.1 229 // See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38064 230 # define BOOST_NO_CXX11_SCOPED_ENUMS 231 #endif 232 233 // C++0x features in 4.6.n and later 234 // 235 #if (BOOST_GCC_VERSION < 40600) || !defined(BOOST_GCC_CXX11) 236 #define BOOST_NO_CXX11_DEFAULTED_MOVES 237 #define BOOST_NO_CXX11_NOEXCEPT 238 #define BOOST_NO_CXX11_NULLPTR 239 #define BOOST_NO_CXX11_RANGE_BASED_FOR 240 #define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX 241 #endif 242 243 // C++0x features in 4.7.n and later 244 // 245 #if (BOOST_GCC_VERSION < 40700) || !defined(BOOST_GCC_CXX11) 246 // Note that while constexpr is partly supported in gcc-4.6 it's a 247 // pre-std version with several bugs: 248 # define BOOST_NO_CXX11_CONSTEXPR 249 # define BOOST_NO_CXX11_FINAL 250 # define BOOST_NO_CXX11_TEMPLATE_ALIASES 251 # define BOOST_NO_CXX11_USER_DEFINED_LITERALS 252 # define BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS 253 # define BOOST_NO_CXX11_OVERRIDE 254 #endif 255 256 // C++0x features in 4.8.n and later 257 // 258 #if (BOOST_GCC_VERSION < 40800) || !defined(BOOST_GCC_CXX11) 259 # define BOOST_NO_CXX11_THREAD_LOCAL 260 # define BOOST_NO_CXX11_SFINAE_EXPR 261 #endif 262 263 // C++0x features in 4.8.1 and later 264 // 265 #if (BOOST_GCC_VERSION < 40801) || !defined(BOOST_GCC_CXX11) 266 # define BOOST_NO_CXX11_DECLTYPE_N3276 267 # define BOOST_NO_CXX11_REF_QUALIFIERS 268 # define BOOST_NO_CXX14_BINARY_LITERALS 269 #endif 270 271 // C++0x features in 4.9.n and later 272 // 273 #if (BOOST_GCC_VERSION < 40900) || !defined(BOOST_GCC_CXX11) 274 // Although alignas support is added in gcc 4.8, it does not accept 275 // dependent constant expressions as an argument until gcc 4.9. 276 # define BOOST_NO_CXX11_ALIGNAS 277 #endif 278 279 // C++0x features in 5.1 and later 280 // 281 #if (BOOST_GCC_VERSION < 50100) || !defined(BOOST_GCC_CXX11) 282 # define BOOST_NO_CXX11_UNRESTRICTED_UNION 283 #endif 284 285 // C++14 features in 4.9.0 and later 286 // 287 #if (BOOST_GCC_VERSION < 40900) || (__cplusplus < 201300) 288 # define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION 289 # define BOOST_NO_CXX14_GENERIC_LAMBDAS 290 # define BOOST_NO_CXX14_DIGIT_SEPARATORS 291 # define BOOST_NO_CXX14_DECLTYPE_AUTO 292 # if !((BOOST_GCC_VERSION >= 40801) && (BOOST_GCC_VERSION < 40900) && defined(BOOST_GCC_CXX11)) 293 # define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES 294 # endif 295 #endif 296 297 298 // C++ 14: 299 #if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304) 300 # define BOOST_NO_CXX14_AGGREGATE_NSDMI 301 #endif 302 #if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304) 303 # define BOOST_NO_CXX14_CONSTEXPR 304 #endif 305 #if (BOOST_GCC_VERSION < 50200) || !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304) 306 # define BOOST_NO_CXX14_VARIABLE_TEMPLATES 307 #endif 308 309 // C++17 310 #if !defined(__cpp_structured_bindings) || (__cpp_structured_bindings < 201606) 311 # define BOOST_NO_CXX17_STRUCTURED_BINDINGS 312 #endif 313 #if !defined(__cpp_inline_variables) || (__cpp_inline_variables < 201606) 314 # define BOOST_NO_CXX17_INLINE_VARIABLES 315 #endif 316 #if !defined(__cpp_fold_expressions) || (__cpp_fold_expressions < 201603) 317 # define BOOST_NO_CXX17_FOLD_EXPRESSIONS 318 #endif 319 #if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606) 320 # define BOOST_NO_CXX17_IF_CONSTEXPR 321 #endif 322 323 #if __GNUC__ >= 7 324 # define BOOST_FALLTHROUGH __attribute__((fallthrough)) 325 #endif 326 327 #if (__GNUC__ < 11) && defined(__MINGW32__) && !defined(__MINGW64__) 328 // thread_local was broken on mingw for all 32bit compiler releases prior to 11.x, see 329 // https://sourceforge.net/p/mingw-w64/bugs/527/ 330 // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83562 331 // Not setting this causes program termination on thread exit. 332 #define BOOST_NO_CXX11_THREAD_LOCAL 333 #endif 334 335 // 336 // Unused attribute: 337 #if __GNUC__ >= 4 338 # define BOOST_ATTRIBUTE_UNUSED __attribute__((__unused__)) 339 #endif 340 341 // Type aliasing hint. Supported since gcc 3.3. 342 #define BOOST_MAY_ALIAS __attribute__((__may_alias__)) 343 344 // Unreachable code markup 345 #if BOOST_GCC_VERSION >= 40500 346 #define BOOST_UNREACHABLE_RETURN(x) __builtin_unreachable(); 347 #endif 348 349 // Deprecated symbol markup 350 #if BOOST_GCC_VERSION >= 40500 351 #define BOOST_DEPRECATED(msg) __attribute__((deprecated(msg))) 352 #else 353 #define BOOST_DEPRECATED(msg) __attribute__((deprecated)) 354 #endif 355 356 #ifndef BOOST_COMPILER 357 # define BOOST_COMPILER "GNU C++ version " __VERSION__ 358 #endif 359 360 // ConceptGCC compiler: 361 // http://www.generic-programming.org/software/ConceptGCC/ 362 #ifdef __GXX_CONCEPTS__ 363 # define BOOST_HAS_CONCEPTS 364 # define BOOST_COMPILER "ConceptGCC version " __VERSION__ 365 #endif 366 367 // versions check: 368 // we don't know gcc prior to version 3.30: 369 #if (BOOST_GCC_VERSION < 30300) 370 # error "Compiler not configured - please reconfigure" 371 #endif 372 // 373 // last known and checked version is 8.1: 374 #if (BOOST_GCC_VERSION > 80100) 375 # if defined(BOOST_ASSERT_CONFIG) 376 # error "Boost.Config is older than your compiler - please check for an updated Boost release." 377 # else 378 // we don't emit warnings here anymore since there are no defect macros defined for 379 // gcc post 3.4, so any failures are gcc regressions... 380 //# warning "boost: Unknown compiler version - please run the configure tests and report the results" 381 # endif 382 #endif 383