1 // Copyright (C) 2001-2003 2 // William E. Kempf 3 // Copyright (C) 2011-2013 Vicente J. Botet Escriba 4 // 5 // Distributed under the Boost Software License, Version 1.0. (See accompanying 6 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 7 8 #ifndef BOOST_THREAD_CONFIG_WEK01032003_HPP 9 #define BOOST_THREAD_CONFIG_WEK01032003_HPP 10 11 #include <boost/config.hpp> 12 #include <boost/detail/workaround.hpp> 13 #include <boost/thread/detail/platform.hpp> 14 15 //#define BOOST_THREAD_DONT_PROVIDE_INTERRUPTIONS 16 // ATTRIBUTE_MAY_ALIAS 17 18 #if defined(__GNUC__) && !defined(__INTEL_COMPILER) 19 20 // GCC since 3.3 has may_alias attribute that helps to alleviate optimizer issues with 21 // regard to violation of the strict aliasing rules. 22 23 #define BOOST_THREAD_DETAIL_USE_ATTRIBUTE_MAY_ALIAS 24 #define BOOST_THREAD_ATTRIBUTE_MAY_ALIAS __attribute__((__may_alias__)) 25 #else 26 #define BOOST_THREAD_ATTRIBUTE_MAY_ALIAS 27 #endif 28 29 30 #if defined BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED 31 #define BOOST_THREAD_ASSERT_PRECONDITION(EXPR, EX) \ 32 if (EXPR) {} else boost::throw_exception(EX) 33 #define BOOST_THREAD_VERIFY_PRECONDITION(EXPR, EX) \ 34 if (EXPR) {} else boost::throw_exception(EX) 35 #define BOOST_THREAD_THROW_ELSE_RETURN(EX, RET) \ 36 boost::throw_exception(EX) 37 #else 38 #define BOOST_THREAD_ASSERT_PRECONDITION(EXPR, EX) 39 #define BOOST_THREAD_VERIFY_PRECONDITION(EXPR, EX) \ 40 (void)(EXPR) 41 #define BOOST_THREAD_THROW_ELSE_RETURN(EX, RET) \ 42 return (RET) 43 #endif 44 45 // This compiler doesn't support Boost.Chrono 46 #if defined __IBMCPP__ && (__IBMCPP__ < 1100) \ 47 && ! defined BOOST_THREAD_DONT_USE_CHRONO 48 #define BOOST_THREAD_DONT_USE_CHRONO 49 #if ! defined BOOST_THREAD_USES_DATETIME 50 #define BOOST_THREAD_USES_DATETIME 51 #endif 52 #endif 53 54 // This compiler doesn't support Boost.Move 55 #if BOOST_WORKAROUND(__SUNPRO_CC, < 0x5100) \ 56 && ! defined BOOST_THREAD_DONT_USE_MOVE 57 #define BOOST_THREAD_DONT_USE_MOVE 58 #endif 59 60 // This compiler doesn't support Boost.Container Allocators files 61 #if defined __SUNPRO_CC \ 62 && ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS 63 #define BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS 64 #endif 65 66 #if defined _WIN32_WCE && _WIN32_WCE==0x501 \ 67 && ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS 68 #define BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS 69 #endif 70 71 72 #if defined BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX || defined BOOST_NO_CXX11_HDR_INITIALIZER_LIST 73 #define BOOST_THREAD_NO_CXX11_HDR_INITIALIZER_LIST 74 #define BOOST_THREAD_NO_MAKE_LOCK_GUARD 75 #define BOOST_THREAD_NO_MAKE_STRICT_LOCK 76 #define BOOST_THREAD_NO_MAKE_NESTED_STRICT_LOCK 77 #endif 78 79 #if defined(BOOST_NO_CXX11_HDR_TUPLE) || defined(BOOST_NO_CXX11_RVALUE_REFERENCES) 80 #define BOOST_THREAD_NO_MAKE_UNIQUE_LOCKS 81 #define BOOST_THREAD_NO_SYNCHRONIZE 82 #elif defined _MSC_VER && _MSC_VER <= 1600 83 // C++ features supported by VC++ 10 (aka 2010) 84 #define BOOST_THREAD_NO_MAKE_UNIQUE_LOCKS 85 #define BOOST_THREAD_NO_SYNCHRONIZE 86 #endif 87 88 /// BASIC_THREAD_ID 89 #if ! defined BOOST_THREAD_DONT_PROVIDE_BASIC_THREAD_ID \ 90 && ! defined BOOST_THREAD_PROVIDES_BASIC_THREAD_ID 91 #define BOOST_THREAD_PROVIDES_BASIC_THREAD_ID 92 #endif 93 94 /// RVALUE_REFERENCES_DONT_MATCH_FUNTION_PTR 95 //#if defined BOOST_NO_CXX11_RVALUE_REFERENCES || defined BOOST_MSVC 96 #define BOOST_THREAD_RVALUE_REFERENCES_DONT_MATCH_FUNTION_PTR 97 //#endif 98 99 // Default version 100 #if !defined BOOST_THREAD_VERSION 101 #define BOOST_THREAD_VERSION 2 102 #else 103 #if BOOST_THREAD_VERSION!=2 && BOOST_THREAD_VERSION!=3 && BOOST_THREAD_VERSION!=4 104 #error "BOOST_THREAD_VERSION must be 2, 3 or 4" 105 #endif 106 #endif 107 108 // CHRONO 109 // Uses Boost.Chrono by default if not stated the opposite defining BOOST_THREAD_DONT_USE_CHRONO 110 #if ! defined BOOST_THREAD_DONT_USE_CHRONO \ 111 && ! defined BOOST_THREAD_USES_CHRONO 112 #define BOOST_THREAD_USES_CHRONO 113 #endif 114 115 #if ! defined BOOST_THREAD_DONT_USE_ATOMIC \ 116 && ! defined BOOST_THREAD_USES_ATOMIC 117 #define BOOST_THREAD_USES_ATOMIC 118 //#define BOOST_THREAD_DONT_USE_ATOMIC 119 #endif 120 121 #if defined BOOST_THREAD_USES_ATOMIC 122 // Andrey Semashev 123 #define BOOST_THREAD_ONCE_ATOMIC 124 #else 125 //#elif ! defined BOOST_NO_CXX11_THREAD_LOCAL && ! defined BOOST_NO_THREAD_LOCAL && ! defined BOOST_THREAD_NO_UINT32_PSEUDO_ATOMIC 126 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2444.html#Appendix 127 #define BOOST_THREAD_ONCE_FAST_EPOCH 128 #endif 129 #if BOOST_THREAD_VERSION==2 130 131 // PROVIDE_PROMISE_LAZY 132 #if ! defined BOOST_THREAD_DONT_PROVIDE_PROMISE_LAZY \ 133 && ! defined BOOST_THREAD_PROVIDES_PROMISE_LAZY 134 #define BOOST_THREAD_PROVIDES_PROMISE_LAZY 135 #endif 136 137 // PROVIDE_THREAD_EQ 138 #if ! defined BOOST_THREAD_DONT_PROVIDE_THREAD_EQ \ 139 && ! defined BOOST_THREAD_PROVIDES_THREAD_EQ 140 #define BOOST_THREAD_PROVIDES_THREAD_EQ 141 #endif 142 143 #endif 144 145 #if BOOST_THREAD_VERSION>=3 146 147 // ONCE_CXX11 148 // fixme BOOST_THREAD_PROVIDES_ONCE_CXX11 doesn't works when thread.cpp is compiled BOOST_THREAD_VERSION 3 149 #if ! defined BOOST_THREAD_DONT_PROVIDE_ONCE_CXX11 \ 150 && ! defined BOOST_THREAD_PROVIDES_ONCE_CXX11 151 #define BOOST_THREAD_DONT_PROVIDE_ONCE_CXX11 152 #endif 153 154 // THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE 155 #if ! defined BOOST_THREAD_DONT_PROVIDE_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE \ 156 && ! defined BOOST_THREAD_PROVIDES_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE 157 #define BOOST_THREAD_PROVIDES_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE 158 #endif 159 160 // THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE 161 #if ! defined BOOST_THREAD_DONT_PROVIDE_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE \ 162 && ! defined BOOST_THREAD_PROVIDES_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE 163 #define BOOST_THREAD_PROVIDES_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE 164 #endif 165 166 // PROVIDE_FUTURE 167 #if ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE \ 168 && ! defined BOOST_THREAD_PROVIDES_FUTURE 169 #define BOOST_THREAD_PROVIDES_FUTURE 170 #endif 171 172 // FUTURE_CTOR_ALLOCATORS 173 #if ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS \ 174 && ! defined BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS 175 #define BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS 176 #endif 177 178 // SHARED_MUTEX_UPWARDS_CONVERSIONS 179 #if ! defined BOOST_THREAD_DONT_PROVIDE_SHARED_MUTEX_UPWARDS_CONVERSIONS \ 180 && ! defined BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS 181 #define BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS 182 #endif 183 184 // PROVIDE_EXPLICIT_LOCK_CONVERSION 185 #if ! defined BOOST_THREAD_DONT_PROVIDE_EXPLICIT_LOCK_CONVERSION \ 186 && ! defined BOOST_THREAD_PROVIDES_EXPLICIT_LOCK_CONVERSION 187 #define BOOST_THREAD_PROVIDES_EXPLICIT_LOCK_CONVERSION 188 #endif 189 190 // GENERIC_SHARED_MUTEX_ON_WIN 191 #if ! defined BOOST_THREAD_DONT_PROVIDE_GENERIC_SHARED_MUTEX_ON_WIN \ 192 && ! defined BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN 193 #define BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN 194 #endif 195 196 // USE_MOVE 197 #if ! defined BOOST_THREAD_DONT_USE_MOVE \ 198 && ! defined BOOST_THREAD_USES_MOVE 199 #define BOOST_THREAD_USES_MOVE 200 #endif 201 202 #endif 203 204 // deprecated since version 4 205 #if BOOST_THREAD_VERSION < 4 206 207 // NESTED_LOCKS 208 #if ! defined BOOST_THREAD_PROVIDES_NESTED_LOCKS \ 209 && ! defined BOOST_THREAD_DONT_PROVIDE_NESTED_LOCKS 210 #define BOOST_THREAD_PROVIDES_NESTED_LOCKS 211 #endif 212 213 // CONDITION 214 #if ! defined BOOST_THREAD_PROVIDES_CONDITION \ 215 && ! defined BOOST_THREAD_DONT_PROVIDE_CONDITION 216 #define BOOST_THREAD_PROVIDES_CONDITION 217 #endif 218 219 // USE_DATETIME 220 #if ! defined BOOST_THREAD_DONT_USE_DATETIME \ 221 && ! defined BOOST_THREAD_USES_DATETIME 222 #define BOOST_THREAD_USES_DATETIME 223 #endif 224 #endif 225 226 #if BOOST_THREAD_VERSION>=4 227 228 // SIGNATURE_PACKAGED_TASK 229 #if ! defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK \ 230 && ! defined BOOST_THREAD_DONT_PROVIDE_SIGNATURE_PACKAGED_TASK 231 #define BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK 232 #endif 233 234 // VARIADIC_THREAD 235 #if ! defined BOOST_THREAD_PROVIDES_VARIADIC_THREAD \ 236 && ! defined BOOST_THREAD_DONT_PROVIDE_VARIADIC_THREAD 237 238 #if ! defined(BOOST_NO_SFINAE_EXPR) && \ 239 ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \ 240 ! defined(BOOST_NO_CXX11_DECLTYPE) && \ 241 ! defined(BOOST_NO_CXX11_DECLTYPE_N3276) && \ 242 ! defined(BOOST_NO_CXX11_TRAILING_RESULT_TYPES) && \ 243 ! defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \ 244 ! defined(BOOST_NO_CXX11_HDR_TUPLE) 245 246 #define BOOST_THREAD_PROVIDES_VARIADIC_THREAD 247 #endif 248 #endif 249 250 #if ! defined BOOST_THREAD_PROVIDES_FUTURE_WHEN_ALL_WHEN_ANY \ 251 && ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_WHEN_ALL_WHEN_ANY 252 253 #if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \ 254 ! defined(BOOST_NO_CXX11_HDR_TUPLE) 255 256 #define BOOST_THREAD_PROVIDES_FUTURE_WHEN_ALL_WHEN_ANY 257 #endif 258 #endif 259 260 // ! defined(BOOST_NO_SFINAE_EXPR) && 261 // ! defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && 262 // ! defined(BOOST_NO_CXX11_AUTO) && 263 // ! defined(BOOST_NO_CXX11_DECLTYPE) && 264 // ! defined(BOOST_NO_CXX11_DECLTYPE_N3276) && 265 266 267 // MAKE_READY_AT_THREAD_EXIT 268 #if ! defined BOOST_THREAD_PROVIDES_MAKE_READY_AT_THREAD_EXIT \ 269 && ! defined BOOST_THREAD_DONT_PROVIDE_MAKE_READY_AT_THREAD_EXIT 270 271 //#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD) 272 #define BOOST_THREAD_PROVIDES_MAKE_READY_AT_THREAD_EXIT 273 //#endif 274 #endif 275 276 // FUTURE_CONTINUATION 277 #if ! defined BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION \ 278 && ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_CONTINUATION 279 #define BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION 280 #endif 281 282 #if ! defined BOOST_THREAD_PROVIDES_FUTURE_UNWRAP \ 283 && ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_UNWRAP 284 #define BOOST_THREAD_PROVIDES_FUTURE_UNWRAP 285 #endif 286 287 // FUTURE_INVALID_AFTER_GET 288 #if ! defined BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET \ 289 && ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_INVALID_AFTER_GET 290 #define BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET 291 #endif 292 293 // NESTED_LOCKS 294 #if ! defined BOOST_THREAD_PROVIDES_NESTED_LOCKS \ 295 && ! defined BOOST_THREAD_DONT_PROVIDE_NESTED_LOCKS 296 #define BOOST_THREAD_DONT_PROVIDE_NESTED_LOCKS 297 #endif 298 299 // CONDITION 300 #if ! defined BOOST_THREAD_PROVIDES_CONDITION \ 301 && ! defined BOOST_THREAD_DONT_PROVIDE_CONDITION 302 #define BOOST_THREAD_DONT_PROVIDE_CONDITION 303 #endif 304 305 #endif // BOOST_THREAD_VERSION>=4 306 307 // INTERRUPTIONS 308 #if ! defined BOOST_THREAD_PROVIDES_INTERRUPTIONS \ 309 && ! defined BOOST_THREAD_DONT_PROVIDE_INTERRUPTIONS 310 #define BOOST_THREAD_PROVIDES_INTERRUPTIONS 311 #endif 312 313 // CORRELATIONS 314 315 // EXPLICIT_LOCK_CONVERSION. 316 #if defined BOOST_THREAD_PROVIDES_EXPLICIT_LOCK_CONVERSION 317 #define BOOST_THREAD_EXPLICIT_LOCK_CONVERSION explicit 318 #else 319 #define BOOST_THREAD_EXPLICIT_LOCK_CONVERSION 320 #endif 321 322 // BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN is defined if BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS 323 #if defined BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS \ 324 && ! defined BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN 325 #define BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN 326 #endif 327 328 // For C++11 call_once interface the compiler MUST support constexpr. 329 // Otherwise once_flag would be initialized during dynamic initialization stage, which is not thread-safe. 330 #if defined(BOOST_THREAD_PROVIDES_ONCE_CXX11) 331 #if defined(BOOST_NO_CXX11_CONSTEXPR) 332 #undef BOOST_THREAD_PROVIDES_ONCE_CXX11 333 #endif 334 #endif 335 336 #if defined(BOOST_THREAD_PLATFORM_WIN32) && defined BOOST_THREAD_DONT_USE_DATETIME 337 #undef BOOST_THREAD_DONT_USE_DATETIME 338 #define BOOST_THREAD_USES_DATETIME 339 #endif 340 341 #if defined(BOOST_THREAD_PLATFORM_WIN32) && defined BOOST_THREAD_DONT_USE_CHRONO 342 #undef BOOST_THREAD_DONT_USE_CHRONO 343 #define BOOST_THREAD_USES_CHRONO 344 #endif 345 346 // BOOST_THREAD_PROVIDES_DEPRECATED_FEATURES_SINCE_V3_0_0 defined by default up to Boost 1.55 347 // BOOST_THREAD_DONT_PROVIDE_DEPRECATED_FEATURES_SINCE_V3_0_0 defined by default up to Boost 1.55 348 #if defined BOOST_THREAD_PROVIDES_DEPRECATED_FEATURES_SINCE_V3_0_0 349 350 #if ! defined BOOST_THREAD_PROVIDES_THREAD_EQ 351 #define BOOST_THREAD_PROVIDES_THREAD_EQ 352 #endif 353 354 #endif 355 356 357 //#if ! defined BOOST_NO_CXX11_RVALUE_REFERENCES || defined BOOST_THREAD_USES_MOVE 358 #if ! defined BOOST_NO_CXX11_RVALUE_REFERENCES 359 #define BOOST_THREAD_FUTURE_USES_OPTIONAL 360 #endif 361 362 #if BOOST_WORKAROUND(__BORLANDC__, < 0x600) 363 # pragma warn -8008 // Condition always true/false 364 # pragma warn -8080 // Identifier declared but never used 365 # pragma warn -8057 // Parameter never used 366 # pragma warn -8066 // Unreachable code 367 #endif 368 369 #include <boost/thread/detail/platform.hpp> 370 371 #if defined(BOOST_THREAD_PLATFORM_WIN32) 372 #else 373 # if defined(BOOST_HAS_PTHREAD_DELAY_NP) || defined(BOOST_HAS_NANOSLEEP) 374 # define BOOST_THREAD_SLEEP_FOR_IS_STEADY 375 # endif 376 #endif 377 378 // provided for backwards compatibility, since this 379 // macro was used for several releases by mistake. 380 #if defined(BOOST_THREAD_DYN_DLL) && ! defined BOOST_THREAD_DYN_LINK 381 # define BOOST_THREAD_DYN_LINK 382 #endif 383 384 // compatibility with the rest of Boost's auto-linking code: 385 #if defined(BOOST_THREAD_DYN_LINK) || defined(BOOST_ALL_DYN_LINK) 386 # undef BOOST_THREAD_USE_LIB 387 # if !defined(BOOST_THREAD_USE_DLL) 388 # define BOOST_THREAD_USE_DLL 389 # endif 390 #endif 391 392 #if defined(BOOST_THREAD_BUILD_DLL) //Build dll 393 #elif defined(BOOST_THREAD_BUILD_LIB) //Build lib 394 #elif defined(BOOST_THREAD_USE_DLL) //Use dll 395 #elif defined(BOOST_THREAD_USE_LIB) //Use lib 396 #else //Use default 397 # if defined(BOOST_THREAD_PLATFORM_WIN32) 398 # if defined(BOOST_MSVC) || defined(BOOST_INTEL_WIN) \ 399 || defined(__MINGW32__) || defined(MINGW32) || defined(BOOST_MINGW32) 400 //For compilers supporting auto-tss cleanup 401 //with Boost.Threads lib, use Boost.Threads lib 402 # define BOOST_THREAD_USE_LIB 403 # else 404 //For compilers not yet supporting auto-tss cleanup 405 //with Boost.Threads lib, use Boost.Threads dll 406 # define BOOST_THREAD_USE_DLL 407 # endif 408 # else 409 # define BOOST_THREAD_USE_LIB 410 # endif 411 #endif 412 413 #if defined(BOOST_HAS_DECLSPEC) 414 # if defined(BOOST_THREAD_BUILD_DLL) //Build dll 415 # define BOOST_THREAD_DECL BOOST_SYMBOL_EXPORT 416 //# define BOOST_THREAD_DECL __declspec(dllexport) 417 418 # elif defined(BOOST_THREAD_USE_DLL) //Use dll 419 # define BOOST_THREAD_DECL BOOST_SYMBOL_IMPORT 420 //# define BOOST_THREAD_DECL __declspec(dllimport) 421 # else 422 # define BOOST_THREAD_DECL 423 # endif 424 #elif (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4) 425 # define BOOST_THREAD_DECL BOOST_SYMBOL_VISIBLE 426 427 #else 428 # define BOOST_THREAD_DECL 429 #endif // BOOST_HAS_DECLSPEC 430 431 // 432 // Automatically link to the correct build variant where possible. 433 // 434 #if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_THREAD_NO_LIB) && !defined(BOOST_THREAD_BUILD_DLL) && !defined(BOOST_THREAD_BUILD_LIB) 435 // 436 // Tell the autolink to link dynamically, this will get undef'ed by auto_link.hpp 437 // once it's done with it: 438 // 439 #if defined(BOOST_THREAD_USE_DLL) 440 # define BOOST_DYN_LINK 441 #endif 442 // 443 // Set the name of our library, this will get undef'ed by auto_link.hpp 444 // once it's done with it: 445 // 446 #if defined(BOOST_THREAD_LIB_NAME) 447 # define BOOST_LIB_NAME BOOST_THREAD_LIB_NAME 448 #else 449 # define BOOST_LIB_NAME boost_thread 450 #endif 451 // 452 // If we're importing code from a dll, then tell auto_link.hpp about it: 453 // 454 // And include the header that does the work: 455 // 456 #include <boost/config/auto_link.hpp> 457 #endif // auto-linking disabled 458 459 #endif // BOOST_THREAD_CONFIG_WEK1032003_HPP 460 461 // Change Log: 462 // 22 Jan 05 Roland Schwarz (speedsnail) 463 // Usage of BOOST_HAS_DECLSPEC macro. 464 // Default again is static lib usage. 465 // BOOST_DYN_LINK only defined when autolink included. 466