annotate DEPENDENCIES/generic/include/boost/asio/detail/config.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 //
Chris@16 2 // detail/config.hpp
Chris@16 3 // ~~~~~~~~~~~~~~~~~
Chris@16 4 //
Chris@101 5 // Copyright (c) 2003-2015 Christopher M. Kohlhoff (chris at kohlhoff dot com)
Chris@16 6 //
Chris@16 7 // Distributed under the Boost Software License, Version 1.0. (See accompanying
Chris@16 8 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 9 //
Chris@16 10
Chris@16 11 #ifndef BOOST_ASIO_DETAIL_CONFIG_HPP
Chris@16 12 #define BOOST_ASIO_DETAIL_CONFIG_HPP
Chris@16 13
Chris@16 14 #if defined(BOOST_ASIO_STANDALONE)
Chris@16 15 # define BOOST_ASIO_DISABLE_BOOST_ARRAY 1
Chris@16 16 # define BOOST_ASIO_DISABLE_BOOST_ASSERT 1
Chris@16 17 # define BOOST_ASIO_DISABLE_BOOST_BIND 1
Chris@16 18 # define BOOST_ASIO_DISABLE_BOOST_CHRONO 1
Chris@16 19 # define BOOST_ASIO_DISABLE_BOOST_DATE_TIME 1
Chris@16 20 # define BOOST_ASIO_DISABLE_BOOST_LIMITS 1
Chris@16 21 # define BOOST_ASIO_DISABLE_BOOST_REGEX 1
Chris@16 22 # define BOOST_ASIO_DISABLE_BOOST_STATIC_CONSTANT 1
Chris@16 23 # define BOOST_ASIO_DISABLE_BOOST_THROW_EXCEPTION 1
Chris@16 24 # define BOOST_ASIO_DISABLE_BOOST_WORKAROUND 1
Chris@16 25 #else // defined(BOOST_ASIO_STANDALONE)
Chris@16 26 # include <boost/config.hpp>
Chris@16 27 # include <boost/version.hpp>
Chris@16 28 # define BOOST_ASIO_HAS_BOOST_CONFIG 1
Chris@16 29 #endif // defined(BOOST_ASIO_STANDALONE)
Chris@16 30
Chris@16 31 // Default to a header-only implementation. The user must specifically request
Chris@16 32 // separate compilation by defining either BOOST_ASIO_SEPARATE_COMPILATION or
Chris@16 33 // BOOST_ASIO_DYN_LINK (as a DLL/shared library implies separate compilation).
Chris@16 34 #if !defined(BOOST_ASIO_HEADER_ONLY)
Chris@16 35 # if !defined(BOOST_ASIO_SEPARATE_COMPILATION)
Chris@16 36 # if !defined(BOOST_ASIO_DYN_LINK)
Chris@16 37 # define BOOST_ASIO_HEADER_ONLY 1
Chris@16 38 # endif // !defined(BOOST_ASIO_DYN_LINK)
Chris@16 39 # endif // !defined(BOOST_ASIO_SEPARATE_COMPILATION)
Chris@16 40 #endif // !defined(BOOST_ASIO_HEADER_ONLY)
Chris@16 41
Chris@16 42 #if defined(BOOST_ASIO_HEADER_ONLY)
Chris@16 43 # define BOOST_ASIO_DECL inline
Chris@16 44 #else // defined(BOOST_ASIO_HEADER_ONLY)
Chris@16 45 # if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__CODEGEARC__)
Chris@16 46 // We need to import/export our code only if the user has specifically asked
Chris@16 47 // for it by defining BOOST_ASIO_DYN_LINK.
Chris@16 48 # if defined(BOOST_ASIO_DYN_LINK)
Chris@16 49 // Export if this is our own source, otherwise import.
Chris@16 50 # if defined(BOOST_ASIO_SOURCE)
Chris@16 51 # define BOOST_ASIO_DECL __declspec(dllexport)
Chris@16 52 # else // defined(BOOST_ASIO_SOURCE)
Chris@16 53 # define BOOST_ASIO_DECL __declspec(dllimport)
Chris@16 54 # endif // defined(BOOST_ASIO_SOURCE)
Chris@16 55 # endif // defined(BOOST_ASIO_DYN_LINK)
Chris@16 56 # endif // defined(_MSC_VER) || defined(__BORLANDC__) || defined(__CODEGEARC__)
Chris@16 57 #endif // defined(BOOST_ASIO_HEADER_ONLY)
Chris@16 58
Chris@16 59 // If BOOST_ASIO_DECL isn't defined yet define it now.
Chris@16 60 #if !defined(BOOST_ASIO_DECL)
Chris@16 61 # define BOOST_ASIO_DECL
Chris@16 62 #endif // !defined(BOOST_ASIO_DECL)
Chris@16 63
Chris@16 64 // Microsoft Visual C++ detection.
Chris@16 65 #if !defined(BOOST_ASIO_MSVC)
Chris@16 66 # if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_MSVC)
Chris@16 67 # define BOOST_ASIO_MSVC BOOST_MSVC
Chris@16 68 # elif defined(_MSC_VER) && !defined(__MWERKS__) && !defined(__EDG_VERSION__)
Chris@16 69 # define BOOST_ASIO_MSVC _MSC_VER
Chris@16 70 # endif // defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_MSVC)
Chris@16 71 #endif // defined(BOOST_ASIO_MSVC)
Chris@16 72
Chris@16 73 // Clang / libc++ detection.
Chris@16 74 #if defined(__clang__)
Chris@16 75 # if (__cplusplus >= 201103)
Chris@16 76 # if __has_include(<__config>)
Chris@16 77 # include <__config>
Chris@16 78 # if defined(_LIBCPP_VERSION)
Chris@16 79 # define BOOST_ASIO_HAS_CLANG_LIBCXX 1
Chris@16 80 # endif // defined(_LIBCPP_VERSION)
Chris@16 81 # endif // __has_include(<__config>)
Chris@16 82 # endif // (__cplusplus >= 201103)
Chris@16 83 #endif // defined(__clang__)
Chris@16 84
Chris@16 85 // Support move construction and assignment on compilers known to allow it.
Chris@16 86 #if !defined(BOOST_ASIO_HAS_MOVE)
Chris@16 87 # if !defined(BOOST_ASIO_DISABLE_MOVE)
Chris@16 88 # if defined(__clang__)
Chris@16 89 # if __has_feature(__cxx_rvalue_references__)
Chris@16 90 # define BOOST_ASIO_HAS_MOVE 1
Chris@16 91 # endif // __has_feature(__cxx_rvalue_references__)
Chris@16 92 # endif // defined(__clang__)
Chris@16 93 # if defined(__GNUC__)
Chris@16 94 # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
Chris@16 95 # if defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 96 # define BOOST_ASIO_HAS_MOVE 1
Chris@16 97 # endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 98 # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
Chris@16 99 # endif // defined(__GNUC__)
Chris@16 100 # if defined(BOOST_ASIO_MSVC)
Chris@16 101 # if (_MSC_VER >= 1700)
Chris@16 102 # define BOOST_ASIO_HAS_MOVE 1
Chris@16 103 # endif // (_MSC_VER >= 1700)
Chris@16 104 # endif // defined(BOOST_ASIO_MSVC)
Chris@16 105 # endif // !defined(BOOST_ASIO_DISABLE_MOVE)
Chris@16 106 #endif // !defined(BOOST_ASIO_HAS_MOVE)
Chris@16 107
Chris@16 108 // If BOOST_ASIO_MOVE_CAST isn't defined, and move support is available, define
Chris@16 109 // BOOST_ASIO_MOVE_ARG and BOOST_ASIO_MOVE_CAST to take advantage of rvalue
Chris@16 110 // references and perfect forwarding.
Chris@16 111 #if defined(BOOST_ASIO_HAS_MOVE) && !defined(BOOST_ASIO_MOVE_CAST)
Chris@16 112 # define BOOST_ASIO_MOVE_ARG(type) type&&
Chris@16 113 # define BOOST_ASIO_MOVE_CAST(type) static_cast<type&&>
Chris@16 114 # define BOOST_ASIO_MOVE_CAST2(type1, type2) static_cast<type1, type2&&>
Chris@16 115 #endif // defined(BOOST_ASIO_HAS_MOVE) && !defined(BOOST_ASIO_MOVE_CAST)
Chris@16 116
Chris@16 117 // If BOOST_ASIO_MOVE_CAST still isn't defined, default to a C++03-compatible
Chris@16 118 // implementation. Note that older g++ and MSVC versions don't like it when you
Chris@16 119 // pass a non-member function through a const reference, so for most compilers
Chris@16 120 // we'll play it safe and stick with the old approach of passing the handler by
Chris@16 121 // value.
Chris@16 122 #if !defined(BOOST_ASIO_MOVE_CAST)
Chris@16 123 # if defined(__GNUC__)
Chris@16 124 # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 1)) || (__GNUC__ > 4)
Chris@16 125 # define BOOST_ASIO_MOVE_ARG(type) const type&
Chris@16 126 # else // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 1)) || (__GNUC__ > 4)
Chris@16 127 # define BOOST_ASIO_MOVE_ARG(type) type
Chris@16 128 # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 1)) || (__GNUC__ > 4)
Chris@16 129 # elif defined(BOOST_ASIO_MSVC)
Chris@16 130 # if (_MSC_VER >= 1400)
Chris@16 131 # define BOOST_ASIO_MOVE_ARG(type) const type&
Chris@16 132 # else // (_MSC_VER >= 1400)
Chris@16 133 # define BOOST_ASIO_MOVE_ARG(type) type
Chris@16 134 # endif // (_MSC_VER >= 1400)
Chris@16 135 # else
Chris@16 136 # define BOOST_ASIO_MOVE_ARG(type) type
Chris@16 137 # endif
Chris@16 138 # define BOOST_ASIO_MOVE_CAST(type) static_cast<const type&>
Chris@16 139 # define BOOST_ASIO_MOVE_CAST2(type1, type2) static_cast<const type1, type2&>
Chris@16 140 #endif // !defined(BOOST_ASIO_MOVE_CAST)
Chris@16 141
Chris@16 142 // Support variadic templates on compilers known to allow it.
Chris@16 143 #if !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
Chris@16 144 # if !defined(BOOST_ASIO_DISABLE_VARIADIC_TEMPLATES)
Chris@16 145 # if defined(__clang__)
Chris@16 146 # if __has_feature(__cxx_variadic_templates__)
Chris@16 147 # define BOOST_ASIO_HAS_VARIADIC_TEMPLATES 1
Chris@16 148 # endif // __has_feature(__cxx_variadic_templates__)
Chris@16 149 # endif // defined(__clang__)
Chris@16 150 # if defined(__GNUC__)
Chris@16 151 # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 4)
Chris@16 152 # if defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 153 # define BOOST_ASIO_HAS_VARIADIC_TEMPLATES 1
Chris@16 154 # endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 155 # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 4)
Chris@16 156 # endif // defined(__GNUC__)
Chris@16 157 # endif // !defined(BOOST_ASIO_DISABLE_VARIADIC_TEMPLATES)
Chris@16 158 #endif // !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
Chris@16 159
Chris@16 160 // Support constexpr on compilers known to allow it.
Chris@16 161 #if !defined(BOOST_ASIO_HAS_CONSTEXPR)
Chris@16 162 # if !defined(BOOST_ASIO_DISABLE_CONSTEXPR)
Chris@16 163 # if defined(__clang__)
Chris@16 164 # if __has_feature(__cxx_constexpr__)
Chris@16 165 # define BOOST_ASIO_HAS_CONSTEXPR 1
Chris@16 166 # endif // __has_feature(__cxx_constexr__)
Chris@16 167 # endif // defined(__clang__)
Chris@16 168 # if defined(__GNUC__)
Chris@16 169 # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4)
Chris@16 170 # if defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 171 # define BOOST_ASIO_HAS_CONSTEXPR 1
Chris@16 172 # endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 173 # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4)
Chris@16 174 # endif // defined(__GNUC__)
Chris@16 175 # endif // !defined(BOOST_ASIO_DISABLE_CONSTEXPR)
Chris@16 176 #endif // !defined(BOOST_ASIO_HAS_CONSTEXPR)
Chris@16 177 #if !defined(BOOST_ASIO_CONSTEXPR)
Chris@16 178 # if defined(BOOST_ASIO_HAS_CONSTEXPR)
Chris@16 179 # define BOOST_ASIO_CONSTEXPR constexpr
Chris@16 180 # else // defined(BOOST_ASIO_HAS_CONSTEXPR)
Chris@16 181 # define BOOST_ASIO_CONSTEXPR
Chris@16 182 # endif // defined(BOOST_ASIO_HAS_CONSTEXPR)
Chris@16 183 #endif // !defined(BOOST_ASIO_CONSTEXPR)
Chris@16 184
Chris@16 185 // Standard library support for system errors.
Chris@16 186 # if !defined(BOOST_ASIO_DISABLE_STD_SYSTEM_ERROR)
Chris@101 187 # if defined(__clang__)
Chris@101 188 # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
Chris@101 189 # define BOOST_ASIO_HAS_STD_SYSTEM_ERROR 1
Chris@101 190 # elif (__cplusplus >= 201103)
Chris@101 191 # if __has_include(<system_error>)
Chris@101 192 # define BOOST_ASIO_HAS_STD_SYSTEM_ERROR 1
Chris@101 193 # endif // __has_include(<system_error>)
Chris@101 194 # endif // (__cplusplus >= 201103)
Chris@101 195 # endif // defined(__clang__)
Chris@16 196 # if defined(__GNUC__)
Chris@16 197 # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4)
Chris@16 198 # if defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 199 # define BOOST_ASIO_HAS_STD_SYSTEM_ERROR 1
Chris@16 200 # endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 201 # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4)
Chris@16 202 # endif // defined(__GNUC__)
Chris@16 203 # if defined(BOOST_ASIO_MSVC)
Chris@16 204 # if (_MSC_VER >= 1700)
Chris@16 205 # define BOOST_ASIO_HAS_STD_SYSTEM_ERROR 1
Chris@16 206 # endif // (_MSC_VER >= 1700)
Chris@16 207 # endif // defined(BOOST_ASIO_MSVC)
Chris@16 208 # endif // !defined(BOOST_ASIO_DISABLE_STD_SYSTEM_ERROR)
Chris@16 209
Chris@16 210 // Compliant C++11 compilers put noexcept specifiers on error_category members.
Chris@16 211 #if !defined(BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT)
Chris@16 212 # if (BOOST_VERSION >= 105300)
Chris@16 213 # define BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT BOOST_NOEXCEPT
Chris@16 214 # elif defined(__clang__)
Chris@16 215 # if __has_feature(__cxx_noexcept__)
Chris@16 216 # define BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT noexcept(true)
Chris@16 217 # endif // __has_feature(__cxx_noexcept__)
Chris@16 218 # elif defined(__GNUC__)
Chris@16 219 # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4)
Chris@16 220 # if defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 221 # define BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT noexcept(true)
Chris@16 222 # endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 223 # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4)
Chris@16 224 # endif // defined(__GNUC__)
Chris@101 225 # if defined(BOOST_ASIO_MSVC)
Chris@101 226 # if (_MSC_VER >= 1900)
Chris@101 227 # define BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT noexcept(true)
Chris@101 228 # endif // (_MSC_VER >= 1900)
Chris@101 229 # endif // defined(BOOST_ASIO_MSVC)
Chris@16 230 # if !defined(BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT)
Chris@16 231 # define BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT
Chris@16 232 # endif // !defined(BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT)
Chris@16 233 #endif // !defined(BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT)
Chris@16 234
Chris@16 235 // Standard library support for arrays.
Chris@16 236 #if !defined(BOOST_ASIO_HAS_STD_ARRAY)
Chris@16 237 # if !defined(BOOST_ASIO_DISABLE_STD_ARRAY)
Chris@101 238 # if defined(__clang__)
Chris@101 239 # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
Chris@101 240 # define BOOST_ASIO_HAS_STD_ARRAY 1
Chris@101 241 # elif (__cplusplus >= 201103)
Chris@101 242 # if __has_include(<array>)
Chris@101 243 # define BOOST_ASIO_HAS_STD_ARRAY 1
Chris@101 244 # endif // __has_include(<array>)
Chris@101 245 # endif // (__cplusplus >= 201103)
Chris@101 246 # endif // defined(__clang__)
Chris@16 247 # if defined(__GNUC__)
Chris@16 248 # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 4)
Chris@16 249 # if defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 250 # define BOOST_ASIO_HAS_STD_ARRAY 1
Chris@16 251 # endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 252 # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 4)
Chris@16 253 # endif // defined(__GNUC__)
Chris@16 254 # if defined(BOOST_ASIO_MSVC)
Chris@16 255 # if (_MSC_VER >= 1600)
Chris@16 256 # define BOOST_ASIO_HAS_STD_ARRAY 1
Chris@16 257 # endif // (_MSC_VER >= 1600)
Chris@16 258 # endif // defined(BOOST_ASIO_MSVC)
Chris@16 259 # endif // !defined(BOOST_ASIO_DISABLE_STD_ARRAY)
Chris@16 260 #endif // !defined(BOOST_ASIO_HAS_STD_ARRAY)
Chris@16 261
Chris@16 262 // Standard library support for shared_ptr and weak_ptr.
Chris@16 263 #if !defined(BOOST_ASIO_HAS_STD_SHARED_PTR)
Chris@16 264 # if !defined(BOOST_ASIO_DISABLE_STD_SHARED_PTR)
Chris@101 265 # if defined(__clang__)
Chris@101 266 # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
Chris@101 267 # define BOOST_ASIO_HAS_STD_SHARED_PTR 1
Chris@101 268 # elif (__cplusplus >= 201103)
Chris@101 269 # define BOOST_ASIO_HAS_STD_SHARED_PTR 1
Chris@101 270 # endif // (__cplusplus >= 201103)
Chris@101 271 # endif // defined(__clang__)
Chris@16 272 # if defined(__GNUC__)
Chris@16 273 # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 4)
Chris@16 274 # if defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 275 # define BOOST_ASIO_HAS_STD_SHARED_PTR 1
Chris@16 276 # endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 277 # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 4)
Chris@16 278 # endif // defined(__GNUC__)
Chris@16 279 # if defined(BOOST_ASIO_MSVC)
Chris@16 280 # if (_MSC_VER >= 1600)
Chris@16 281 # define BOOST_ASIO_HAS_STD_SHARED_PTR 1
Chris@16 282 # endif // (_MSC_VER >= 1600)
Chris@16 283 # endif // defined(BOOST_ASIO_MSVC)
Chris@16 284 # endif // !defined(BOOST_ASIO_DISABLE_STD_SHARED_PTR)
Chris@16 285 #endif // !defined(BOOST_ASIO_HAS_STD_SHARED_PTR)
Chris@16 286
Chris@16 287 // Standard library support for atomic operations.
Chris@16 288 #if !defined(BOOST_ASIO_HAS_STD_ATOMIC)
Chris@16 289 # if !defined(BOOST_ASIO_DISABLE_STD_ATOMIC)
Chris@101 290 # if defined(__clang__)
Chris@101 291 # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
Chris@101 292 # define BOOST_ASIO_HAS_STD_ATOMIC 1
Chris@101 293 # elif (__cplusplus >= 201103)
Chris@101 294 # if __has_include(<atomic>)
Chris@101 295 # define BOOST_ASIO_HAS_STD_ATOMIC 1
Chris@101 296 # endif // __has_include(<atomic>)
Chris@101 297 # endif // (__cplusplus >= 201103)
Chris@101 298 # endif // defined(__clang__)
Chris@16 299 # if defined(__GNUC__)
Chris@16 300 # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
Chris@16 301 # if defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 302 # define BOOST_ASIO_HAS_STD_ATOMIC 1
Chris@16 303 # endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 304 # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
Chris@16 305 # endif // defined(__GNUC__)
Chris@16 306 # if defined(BOOST_ASIO_MSVC)
Chris@16 307 # if (_MSC_VER >= 1700)
Chris@16 308 # define BOOST_ASIO_HAS_STD_ATOMIC 1
Chris@16 309 # endif // (_MSC_VER >= 1700)
Chris@16 310 # endif // defined(BOOST_ASIO_MSVC)
Chris@16 311 # endif // !defined(BOOST_ASIO_DISABLE_STD_ATOMIC)
Chris@16 312 #endif // !defined(BOOST_ASIO_HAS_STD_ATOMIC)
Chris@16 313
Chris@16 314 // Standard library support for chrono. Some standard libraries (such as the
Chris@16 315 // libstdc++ shipped with gcc 4.6) provide monotonic_clock as per early C++0x
Chris@16 316 // drafts, rather than the eventually standardised name of steady_clock.
Chris@16 317 #if !defined(BOOST_ASIO_HAS_STD_CHRONO)
Chris@16 318 # if !defined(BOOST_ASIO_DISABLE_STD_CHRONO)
Chris@101 319 # if defined(__clang__)
Chris@101 320 # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
Chris@101 321 # define BOOST_ASIO_HAS_STD_CHRONO 1
Chris@101 322 # elif (__cplusplus >= 201103)
Chris@101 323 # if __has_include(<chrono>)
Chris@101 324 # define BOOST_ASIO_HAS_STD_CHRONO 1
Chris@101 325 # endif // __has_include(<chrono>)
Chris@101 326 # endif // (__cplusplus >= 201103)
Chris@101 327 # endif // defined(__clang__)
Chris@16 328 # if defined(__GNUC__)
Chris@16 329 # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4)
Chris@16 330 # if defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 331 # define BOOST_ASIO_HAS_STD_CHRONO 1
Chris@16 332 # if ((__GNUC__ == 4) && (__GNUC_MINOR__ == 6))
Chris@16 333 # define BOOST_ASIO_HAS_STD_CHRONO_MONOTONIC_CLOCK 1
Chris@16 334 # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ == 6))
Chris@16 335 # endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 336 # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4)
Chris@16 337 # endif // defined(__GNUC__)
Chris@16 338 # if defined(BOOST_ASIO_MSVC)
Chris@16 339 # if (_MSC_VER >= 1700)
Chris@16 340 # define BOOST_ASIO_HAS_STD_CHRONO 1
Chris@16 341 # endif // (_MSC_VER >= 1700)
Chris@16 342 # endif // defined(BOOST_ASIO_MSVC)
Chris@16 343 # endif // !defined(BOOST_ASIO_DISABLE_STD_CHRONO)
Chris@16 344 #endif // !defined(BOOST_ASIO_HAS_STD_CHRONO)
Chris@16 345
Chris@16 346 // Boost support for chrono.
Chris@16 347 #if !defined(BOOST_ASIO_HAS_BOOST_CHRONO)
Chris@16 348 # if !defined(BOOST_ASIO_DISABLE_BOOST_CHRONO)
Chris@16 349 # if (BOOST_VERSION >= 104700)
Chris@16 350 # define BOOST_ASIO_HAS_BOOST_CHRONO 1
Chris@16 351 # endif // (BOOST_VERSION >= 104700)
Chris@16 352 # endif // !defined(BOOST_ASIO_DISABLE_BOOST_CHRONO)
Chris@16 353 #endif // !defined(BOOST_ASIO_HAS_BOOST_CHRONO)
Chris@16 354
Chris@16 355 // Boost support for the DateTime library.
Chris@16 356 #if !defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
Chris@16 357 # if !defined(BOOST_ASIO_DISABLE_BOOST_DATE_TIME)
Chris@16 358 # define BOOST_ASIO_HAS_BOOST_DATE_TIME 1
Chris@16 359 # endif // !defined(BOOST_ASIO_DISABLE_BOOST_DATE_TIME)
Chris@16 360 #endif // !defined(BOOST_ASIO_HAS_BOOST_DATE_TIME)
Chris@16 361
Chris@16 362 // Standard library support for addressof.
Chris@16 363 #if !defined(BOOST_ASIO_HAS_STD_ADDRESSOF)
Chris@16 364 # if !defined(BOOST_ASIO_DISABLE_STD_ADDRESSOF)
Chris@101 365 # if defined(__clang__)
Chris@101 366 # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
Chris@101 367 # define BOOST_ASIO_HAS_STD_ADDRESSOF 1
Chris@101 368 # elif (__cplusplus >= 201103)
Chris@101 369 # define BOOST_ASIO_HAS_STD_ADDRESSOF 1
Chris@101 370 # endif // (__cplusplus >= 201103)
Chris@101 371 # endif // defined(__clang__)
Chris@16 372 # if defined(__GNUC__)
Chris@101 373 # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4)
Chris@16 374 # if defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 375 # define BOOST_ASIO_HAS_STD_ADDRESSOF 1
Chris@16 376 # endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@101 377 # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4)
Chris@16 378 # endif // defined(__GNUC__)
Chris@16 379 # if defined(BOOST_ASIO_MSVC)
Chris@16 380 # if (_MSC_VER >= 1700)
Chris@16 381 # define BOOST_ASIO_HAS_STD_ADDRESSOF 1
Chris@16 382 # endif // (_MSC_VER >= 1700)
Chris@16 383 # endif // defined(BOOST_ASIO_MSVC)
Chris@16 384 # endif // !defined(BOOST_ASIO_DISABLE_STD_ADDRESSOF)
Chris@16 385 #endif // !defined(BOOST_ASIO_HAS_STD_ADDRESSOF)
Chris@16 386
Chris@16 387 // Standard library support for the function class.
Chris@16 388 #if !defined(BOOST_ASIO_HAS_STD_FUNCTION)
Chris@16 389 # if !defined(BOOST_ASIO_DISABLE_STD_FUNCTION)
Chris@101 390 # if defined(__clang__)
Chris@101 391 # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
Chris@101 392 # define BOOST_ASIO_HAS_STD_FUNCTION 1
Chris@101 393 # elif (__cplusplus >= 201103)
Chris@101 394 # define BOOST_ASIO_HAS_STD_FUNCTION 1
Chris@101 395 # endif // (__cplusplus >= 201103)
Chris@101 396 # endif // defined(__clang__)
Chris@16 397 # if defined(__GNUC__)
Chris@16 398 # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
Chris@16 399 # if defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 400 # define BOOST_ASIO_HAS_STD_FUNCTION 1
Chris@16 401 # endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 402 # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
Chris@16 403 # endif // defined(__GNUC__)
Chris@16 404 # if defined(BOOST_ASIO_MSVC)
Chris@16 405 # if (_MSC_VER >= 1700)
Chris@16 406 # define BOOST_ASIO_HAS_STD_FUNCTION 1
Chris@16 407 # endif // (_MSC_VER >= 1700)
Chris@16 408 # endif // defined(BOOST_ASIO_MSVC)
Chris@16 409 # endif // !defined(BOOST_ASIO_DISABLE_STD_FUNCTION)
Chris@16 410 #endif // !defined(BOOST_ASIO_HAS_STD_FUNCTION)
Chris@16 411
Chris@16 412 // Standard library support for type traits.
Chris@16 413 #if !defined(BOOST_ASIO_HAS_STD_TYPE_TRAITS)
Chris@16 414 # if !defined(BOOST_ASIO_DISABLE_STD_TYPE_TRAITS)
Chris@101 415 # if defined(__clang__)
Chris@101 416 # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
Chris@101 417 # define BOOST_ASIO_HAS_STD_TYPE_TRAITS 1
Chris@101 418 # elif (__cplusplus >= 201103)
Chris@101 419 # if __has_include(<type_traits>)
Chris@101 420 # define BOOST_ASIO_HAS_STD_TYPE_TRAITS 1
Chris@101 421 # endif // __has_include(<type_traits>)
Chris@101 422 # endif // (__cplusplus >= 201103)
Chris@101 423 # endif // defined(__clang__)
Chris@16 424 # if defined(__GNUC__)
Chris@16 425 # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
Chris@16 426 # if defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 427 # define BOOST_ASIO_HAS_STD_TYPE_TRAITS 1
Chris@16 428 # endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 429 # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
Chris@16 430 # endif // defined(__GNUC__)
Chris@16 431 # if defined(BOOST_ASIO_MSVC)
Chris@16 432 # if (_MSC_VER >= 1700)
Chris@16 433 # define BOOST_ASIO_HAS_STD_TYPE_TRAITS 1
Chris@16 434 # endif // (_MSC_VER >= 1700)
Chris@16 435 # endif // defined(BOOST_ASIO_MSVC)
Chris@16 436 # endif // !defined(BOOST_ASIO_DISABLE_STD_TYPE_TRAITS)
Chris@16 437 #endif // !defined(BOOST_ASIO_HAS_STD_TYPE_TRAITS)
Chris@16 438
Chris@16 439 // Standard library support for the cstdint header.
Chris@16 440 #if !defined(BOOST_ASIO_HAS_CSTDINT)
Chris@16 441 # if !defined(BOOST_ASIO_DISABLE_CSTDINT)
Chris@101 442 # if defined(__clang__)
Chris@101 443 # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
Chris@101 444 # define BOOST_ASIO_HAS_CSTDINT 1
Chris@101 445 # elif (__cplusplus >= 201103)
Chris@101 446 # define BOOST_ASIO_HAS_CSTDINT 1
Chris@101 447 # endif // (__cplusplus >= 201103)
Chris@101 448 # endif // defined(__clang__)
Chris@16 449 # if defined(__GNUC__)
Chris@16 450 # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
Chris@16 451 # if defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 452 # define BOOST_ASIO_HAS_CSTDINT 1
Chris@16 453 # endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 454 # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)) || (__GNUC__ > 4)
Chris@16 455 # endif // defined(__GNUC__)
Chris@16 456 # if defined(BOOST_ASIO_MSVC)
Chris@16 457 # if (_MSC_VER >= 1700)
Chris@16 458 # define BOOST_ASIO_HAS_CSTDINT 1
Chris@16 459 # endif // (_MSC_VER >= 1700)
Chris@16 460 # endif // defined(BOOST_ASIO_MSVC)
Chris@16 461 # endif // !defined(BOOST_ASIO_DISABLE_CSTDINT)
Chris@16 462 #endif // !defined(BOOST_ASIO_HAS_CSTDINT)
Chris@16 463
Chris@16 464 // Standard library support for the thread class.
Chris@16 465 #if !defined(BOOST_ASIO_HAS_STD_THREAD)
Chris@16 466 # if !defined(BOOST_ASIO_DISABLE_STD_THREAD)
Chris@101 467 # if defined(__clang__)
Chris@101 468 # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
Chris@101 469 # define BOOST_ASIO_HAS_STD_THREAD 1
Chris@101 470 # elif (__cplusplus >= 201103)
Chris@101 471 # if __has_include(<thread>)
Chris@101 472 # define BOOST_ASIO_HAS_STD_THREAD 1
Chris@101 473 # endif // __has_include(<thread>)
Chris@101 474 # endif // (__cplusplus >= 201103)
Chris@101 475 # endif // defined(__clang__)
Chris@16 476 # if defined(__GNUC__)
Chris@16 477 # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4)
Chris@16 478 # if defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 479 # define BOOST_ASIO_HAS_STD_THREAD 1
Chris@16 480 # endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 481 # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4)
Chris@16 482 # endif // defined(__GNUC__)
Chris@16 483 # if defined(BOOST_ASIO_MSVC)
Chris@16 484 # if (_MSC_VER >= 1700)
Chris@16 485 # define BOOST_ASIO_HAS_STD_THREAD 1
Chris@16 486 # endif // (_MSC_VER >= 1700)
Chris@16 487 # endif // defined(BOOST_ASIO_MSVC)
Chris@16 488 # endif // !defined(BOOST_ASIO_DISABLE_STD_THREAD)
Chris@16 489 #endif // !defined(BOOST_ASIO_HAS_STD_THREAD)
Chris@16 490
Chris@16 491 // Standard library support for the mutex and condition variable classes.
Chris@16 492 #if !defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
Chris@16 493 # if !defined(BOOST_ASIO_DISABLE_STD_MUTEX_AND_CONDVAR)
Chris@101 494 # if defined(__clang__)
Chris@101 495 # if defined(BOOST_ASIO_HAS_CLANG_LIBCXX)
Chris@101 496 # define BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR 1
Chris@101 497 # elif (__cplusplus >= 201103)
Chris@101 498 # if __has_include(<mutex>)
Chris@101 499 # define BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR 1
Chris@101 500 # endif // __has_include(<mutex>)
Chris@101 501 # endif // (__cplusplus >= 201103)
Chris@101 502 # endif // defined(__clang__)
Chris@16 503 # if defined(__GNUC__)
Chris@16 504 # if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4)
Chris@16 505 # if defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 506 # define BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR 1
Chris@16 507 # endif // defined(__GXX_EXPERIMENTAL_CXX0X__)
Chris@16 508 # endif // ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)) || (__GNUC__ > 4)
Chris@16 509 # endif // defined(__GNUC__)
Chris@16 510 # if defined(BOOST_ASIO_MSVC)
Chris@16 511 # if (_MSC_VER >= 1700)
Chris@16 512 # define BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR 1
Chris@16 513 # endif // (_MSC_VER >= 1700)
Chris@16 514 # endif // defined(BOOST_ASIO_MSVC)
Chris@16 515 # endif // !defined(BOOST_ASIO_DISABLE_STD_MUTEX_AND_CONDVAR)
Chris@16 516 #endif // !defined(BOOST_ASIO_HAS_STD_MUTEX_AND_CONDVAR)
Chris@16 517
Chris@16 518 // WinRT target.
Chris@16 519 #if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
Chris@16 520 # if defined(__cplusplus_winrt)
Chris@16 521 # include <winapifamily.h>
Chris@101 522 # if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) \
Chris@101 523 && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
Chris@16 524 # define BOOST_ASIO_WINDOWS_RUNTIME 1
Chris@101 525 # endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
Chris@101 526 // && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
Chris@16 527 # endif // defined(__cplusplus_winrt)
Chris@16 528 #endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
Chris@16 529
Chris@16 530 // Windows target. Excludes WinRT.
Chris@16 531 #if !defined(BOOST_ASIO_WINDOWS)
Chris@16 532 # if !defined(BOOST_ASIO_WINDOWS_RUNTIME)
Chris@16 533 # if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_WINDOWS)
Chris@16 534 # define BOOST_ASIO_WINDOWS 1
Chris@16 535 # elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__)
Chris@16 536 # define BOOST_ASIO_WINDOWS 1
Chris@16 537 # endif // defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_WINDOWS)
Chris@16 538 # endif // !defined(BOOST_ASIO_WINDOWS_RUNTIME)
Chris@16 539 #endif // !defined(BOOST_ASIO_WINDOWS)
Chris@16 540
Chris@16 541 // Windows: target OS version.
Chris@16 542 #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
Chris@16 543 # if !defined(_WIN32_WINNT) && !defined(_WIN32_WINDOWS)
Chris@16 544 # if defined(_MSC_VER) || defined(__BORLANDC__)
Chris@16 545 # pragma message( \
Chris@16 546 "Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately. For example:\n"\
Chris@16 547 "- add -D_WIN32_WINNT=0x0501 to the compiler command line; or\n"\
Chris@16 548 "- add _WIN32_WINNT=0x0501 to your project's Preprocessor Definitions.\n"\
Chris@16 549 "Assuming _WIN32_WINNT=0x0501 (i.e. Windows XP target).")
Chris@16 550 # else // defined(_MSC_VER) || defined(__BORLANDC__)
Chris@16 551 # warning Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately.
Chris@16 552 # warning For example, add -D_WIN32_WINNT=0x0501 to the compiler command line.
Chris@16 553 # warning Assuming _WIN32_WINNT=0x0501 (i.e. Windows XP target).
Chris@16 554 # endif // defined(_MSC_VER) || defined(__BORLANDC__)
Chris@16 555 # define _WIN32_WINNT 0x0501
Chris@16 556 # endif // !defined(_WIN32_WINNT) && !defined(_WIN32_WINDOWS)
Chris@16 557 # if defined(_MSC_VER)
Chris@16 558 # if defined(_WIN32) && !defined(WIN32)
Chris@16 559 # if !defined(_WINSOCK2API_)
Chris@16 560 # define WIN32 // Needed for correct types in winsock2.h
Chris@16 561 # else // !defined(_WINSOCK2API_)
Chris@16 562 # error Please define the macro WIN32 in your compiler options
Chris@16 563 # endif // !defined(_WINSOCK2API_)
Chris@16 564 # endif // defined(_WIN32) && !defined(WIN32)
Chris@16 565 # endif // defined(_MSC_VER)
Chris@16 566 # if defined(__BORLANDC__)
Chris@16 567 # if defined(__WIN32__) && !defined(WIN32)
Chris@16 568 # if !defined(_WINSOCK2API_)
Chris@16 569 # define WIN32 // Needed for correct types in winsock2.h
Chris@16 570 # else // !defined(_WINSOCK2API_)
Chris@16 571 # error Please define the macro WIN32 in your compiler options
Chris@16 572 # endif // !defined(_WINSOCK2API_)
Chris@16 573 # endif // defined(__WIN32__) && !defined(WIN32)
Chris@16 574 # endif // defined(__BORLANDC__)
Chris@16 575 # if defined(__CYGWIN__)
Chris@16 576 # if !defined(__USE_W32_SOCKETS)
Chris@16 577 # error You must add -D__USE_W32_SOCKETS to your compiler options.
Chris@16 578 # endif // !defined(__USE_W32_SOCKETS)
Chris@16 579 # endif // defined(__CYGWIN__)
Chris@16 580 #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
Chris@16 581
Chris@16 582 // Windows: minimise header inclusion.
Chris@16 583 #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
Chris@16 584 # if !defined(BOOST_ASIO_NO_WIN32_LEAN_AND_MEAN)
Chris@16 585 # if !defined(WIN32_LEAN_AND_MEAN)
Chris@16 586 # define WIN32_LEAN_AND_MEAN
Chris@16 587 # endif // !defined(WIN32_LEAN_AND_MEAN)
Chris@16 588 # endif // !defined(BOOST_ASIO_NO_WIN32_LEAN_AND_MEAN)
Chris@16 589 #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
Chris@16 590
Chris@16 591 // Windows: suppress definition of "min" and "max" macros.
Chris@16 592 #if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
Chris@16 593 # if !defined(BOOST_ASIO_NO_NOMINMAX)
Chris@16 594 # if !defined(NOMINMAX)
Chris@16 595 # define NOMINMAX 1
Chris@16 596 # endif // !defined(NOMINMAX)
Chris@16 597 # endif // !defined(BOOST_ASIO_NO_NOMINMAX)
Chris@16 598 #endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
Chris@16 599
Chris@16 600 // Windows: IO Completion Ports.
Chris@16 601 #if !defined(BOOST_ASIO_HAS_IOCP)
Chris@16 602 # if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
Chris@16 603 # if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0400)
Chris@16 604 # if !defined(UNDER_CE)
Chris@16 605 # if !defined(BOOST_ASIO_DISABLE_IOCP)
Chris@16 606 # define BOOST_ASIO_HAS_IOCP 1
Chris@16 607 # endif // !defined(BOOST_ASIO_DISABLE_IOCP)
Chris@16 608 # endif // !defined(UNDER_CE)
Chris@16 609 # endif // defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0400)
Chris@16 610 # endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
Chris@16 611 #endif // !defined(BOOST_ASIO_HAS_IOCP)
Chris@16 612
Chris@101 613 // On POSIX (and POSIX-like) platforms we need to include unistd.h in order to
Chris@101 614 // get access to the various platform feature macros, e.g. to be able to test
Chris@101 615 // for threads support.
Chris@101 616 #if !defined(BOOST_ASIO_HAS_UNISTD_H)
Chris@101 617 # if !defined(BOOST_ASIO_HAS_BOOST_CONFIG)
Chris@101 618 # if defined(unix) \
Chris@101 619 || defined(__unix) \
Chris@101 620 || defined(_XOPEN_SOURCE) \
Chris@101 621 || defined(_POSIX_SOURCE) \
Chris@101 622 || (defined(__MACH__) && defined(__APPLE__)) \
Chris@101 623 || defined(__FreeBSD__) \
Chris@101 624 || defined(__NetBSD__) \
Chris@101 625 || defined(__OpenBSD__) \
Chris@101 626 || defined(__linux__)
Chris@101 627 # define BOOST_ASIO_HAS_UNISTD_H 1
Chris@101 628 # endif
Chris@101 629 # endif // !defined(BOOST_ASIO_HAS_BOOST_CONFIG)
Chris@101 630 #endif // !defined(BOOST_ASIO_HAS_UNISTD_H)
Chris@101 631 #if defined(BOOST_ASIO_HAS_UNISTD_H)
Chris@101 632 # include <unistd.h>
Chris@101 633 #endif // defined(BOOST_ASIO_HAS_UNISTD_H)
Chris@101 634
Chris@16 635 // Linux: epoll, eventfd and timerfd.
Chris@16 636 #if defined(__linux__)
Chris@16 637 # include <linux/version.h>
Chris@16 638 # if !defined(BOOST_ASIO_HAS_EPOLL)
Chris@16 639 # if !defined(BOOST_ASIO_DISABLE_EPOLL)
Chris@16 640 # if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,45)
Chris@16 641 # define BOOST_ASIO_HAS_EPOLL 1
Chris@16 642 # endif // LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,45)
Chris@16 643 # endif // !defined(BOOST_ASIO_DISABLE_EPOLL)
Chris@16 644 # endif // !defined(BOOST_ASIO_HAS_EPOLL)
Chris@16 645 # if !defined(BOOST_ASIO_HAS_EVENTFD)
Chris@16 646 # if !defined(BOOST_ASIO_DISABLE_EVENTFD)
Chris@16 647 # if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
Chris@16 648 # define BOOST_ASIO_HAS_EVENTFD 1
Chris@16 649 # endif // LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
Chris@16 650 # endif // !defined(BOOST_ASIO_DISABLE_EVENTFD)
Chris@16 651 # endif // !defined(BOOST_ASIO_HAS_EVENTFD)
Chris@16 652 # if !defined(BOOST_ASIO_HAS_TIMERFD)
Chris@16 653 # if defined(BOOST_ASIO_HAS_EPOLL)
Chris@16 654 # if (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 8)
Chris@16 655 # define BOOST_ASIO_HAS_TIMERFD 1
Chris@16 656 # endif // (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 8)
Chris@16 657 # endif // defined(BOOST_ASIO_HAS_EPOLL)
Chris@16 658 # endif // !defined(BOOST_ASIO_HAS_TIMERFD)
Chris@16 659 #endif // defined(__linux__)
Chris@16 660
Chris@16 661 // Mac OS X, FreeBSD, NetBSD, OpenBSD: kqueue.
Chris@16 662 #if (defined(__MACH__) && defined(__APPLE__)) \
Chris@16 663 || defined(__FreeBSD__) \
Chris@16 664 || defined(__NetBSD__) \
Chris@16 665 || defined(__OpenBSD__)
Chris@16 666 # if !defined(BOOST_ASIO_HAS_KQUEUE)
Chris@16 667 # if !defined(BOOST_ASIO_DISABLE_KQUEUE)
Chris@16 668 # define BOOST_ASIO_HAS_KQUEUE 1
Chris@16 669 # endif // !defined(BOOST_ASIO_DISABLE_KQUEUE)
Chris@16 670 # endif // !defined(BOOST_ASIO_HAS_KQUEUE)
Chris@16 671 #endif // (defined(__MACH__) && defined(__APPLE__))
Chris@16 672 // || defined(__FreeBSD__)
Chris@16 673 // || defined(__NetBSD__)
Chris@16 674 // || defined(__OpenBSD__)
Chris@16 675
Chris@16 676 // Solaris: /dev/poll.
Chris@16 677 #if defined(__sun)
Chris@16 678 # if !defined(BOOST_ASIO_HAS_DEV_POLL)
Chris@16 679 # if !defined(BOOST_ASIO_DISABLE_DEV_POLL)
Chris@16 680 # define BOOST_ASIO_HAS_DEV_POLL 1
Chris@16 681 # endif // !defined(BOOST_ASIO_DISABLE_DEV_POLL)
Chris@16 682 # endif // !defined(BOOST_ASIO_HAS_DEV_POLL)
Chris@16 683 #endif // defined(__sun)
Chris@16 684
Chris@16 685 // Serial ports.
Chris@16 686 #if !defined(BOOST_ASIO_HAS_SERIAL_PORT)
Chris@16 687 # if defined(BOOST_ASIO_HAS_IOCP) \
Chris@16 688 || !defined(BOOST_ASIO_WINDOWS) \
Chris@16 689 && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
Chris@16 690 && !defined(__CYGWIN__)
Chris@16 691 # if !defined(__SYMBIAN32__)
Chris@16 692 # if !defined(BOOST_ASIO_DISABLE_SERIAL_PORT)
Chris@16 693 # define BOOST_ASIO_HAS_SERIAL_PORT 1
Chris@16 694 # endif // !defined(BOOST_ASIO_DISABLE_SERIAL_PORT)
Chris@16 695 # endif // !defined(__SYMBIAN32__)
Chris@16 696 # endif // defined(BOOST_ASIO_HAS_IOCP)
Chris@16 697 // || !defined(BOOST_ASIO_WINDOWS)
Chris@16 698 // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
Chris@16 699 // && !defined(__CYGWIN__)
Chris@16 700 #endif // !defined(BOOST_ASIO_HAS_SERIAL_PORT)
Chris@16 701
Chris@16 702 // Windows: stream handles.
Chris@16 703 #if !defined(BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE)
Chris@16 704 # if !defined(BOOST_ASIO_DISABLE_WINDOWS_STREAM_HANDLE)
Chris@16 705 # if defined(BOOST_ASIO_HAS_IOCP)
Chris@16 706 # define BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE 1
Chris@16 707 # endif // defined(BOOST_ASIO_HAS_IOCP)
Chris@16 708 # endif // !defined(BOOST_ASIO_DISABLE_WINDOWS_STREAM_HANDLE)
Chris@16 709 #endif // !defined(BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE)
Chris@16 710
Chris@16 711 // Windows: random access handles.
Chris@16 712 #if !defined(BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE)
Chris@16 713 # if !defined(BOOST_ASIO_DISABLE_WINDOWS_RANDOM_ACCESS_HANDLE)
Chris@16 714 # if defined(BOOST_ASIO_HAS_IOCP)
Chris@16 715 # define BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE 1
Chris@16 716 # endif // defined(BOOST_ASIO_HAS_IOCP)
Chris@16 717 # endif // !defined(BOOST_ASIO_DISABLE_WINDOWS_RANDOM_ACCESS_HANDLE)
Chris@16 718 #endif // !defined(BOOST_ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE)
Chris@16 719
Chris@16 720 // Windows: object handles.
Chris@16 721 #if !defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE)
Chris@16 722 # if !defined(BOOST_ASIO_DISABLE_WINDOWS_OBJECT_HANDLE)
Chris@16 723 # if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
Chris@16 724 # if !defined(UNDER_CE)
Chris@16 725 # define BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE 1
Chris@16 726 # endif // !defined(UNDER_CE)
Chris@16 727 # endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
Chris@16 728 # endif // !defined(BOOST_ASIO_DISABLE_WINDOWS_OBJECT_HANDLE)
Chris@16 729 #endif // !defined(BOOST_ASIO_HAS_WINDOWS_OBJECT_HANDLE)
Chris@16 730
Chris@16 731 // Windows: OVERLAPPED wrapper.
Chris@16 732 #if !defined(BOOST_ASIO_HAS_WINDOWS_OVERLAPPED_PTR)
Chris@16 733 # if !defined(BOOST_ASIO_DISABLE_WINDOWS_OVERLAPPED_PTR)
Chris@16 734 # if defined(BOOST_ASIO_HAS_IOCP)
Chris@16 735 # define BOOST_ASIO_HAS_WINDOWS_OVERLAPPED_PTR 1
Chris@16 736 # endif // defined(BOOST_ASIO_HAS_IOCP)
Chris@16 737 # endif // !defined(BOOST_ASIO_DISABLE_WINDOWS_OVERLAPPED_PTR)
Chris@16 738 #endif // !defined(BOOST_ASIO_HAS_WINDOWS_OVERLAPPED_PTR)
Chris@16 739
Chris@16 740 // POSIX: stream-oriented file descriptors.
Chris@16 741 #if !defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR)
Chris@16 742 # if !defined(BOOST_ASIO_DISABLE_POSIX_STREAM_DESCRIPTOR)
Chris@16 743 # if !defined(BOOST_ASIO_WINDOWS) \
Chris@16 744 && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
Chris@16 745 && !defined(__CYGWIN__)
Chris@16 746 # define BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR 1
Chris@16 747 # endif // !defined(BOOST_ASIO_WINDOWS)
Chris@16 748 // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
Chris@16 749 // && !defined(__CYGWIN__)
Chris@16 750 # endif // !defined(BOOST_ASIO_DISABLE_POSIX_STREAM_DESCRIPTOR)
Chris@16 751 #endif // !defined(BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR)
Chris@16 752
Chris@16 753 // UNIX domain sockets.
Chris@16 754 #if !defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
Chris@16 755 # if !defined(BOOST_ASIO_DISABLE_LOCAL_SOCKETS)
Chris@16 756 # if !defined(BOOST_ASIO_WINDOWS) \
Chris@16 757 && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
Chris@16 758 && !defined(__CYGWIN__)
Chris@16 759 # define BOOST_ASIO_HAS_LOCAL_SOCKETS 1
Chris@16 760 # endif // !defined(BOOST_ASIO_WINDOWS)
Chris@16 761 // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
Chris@16 762 // && !defined(__CYGWIN__)
Chris@16 763 # endif // !defined(BOOST_ASIO_DISABLE_LOCAL_SOCKETS)
Chris@16 764 #endif // !defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
Chris@16 765
Chris@16 766 // Can use sigaction() instead of signal().
Chris@16 767 #if !defined(BOOST_ASIO_HAS_SIGACTION)
Chris@16 768 # if !defined(BOOST_ASIO_DISABLE_SIGACTION)
Chris@16 769 # if !defined(BOOST_ASIO_WINDOWS) \
Chris@16 770 && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
Chris@16 771 && !defined(__CYGWIN__)
Chris@16 772 # define BOOST_ASIO_HAS_SIGACTION 1
Chris@16 773 # endif // !defined(BOOST_ASIO_WINDOWS)
Chris@16 774 // && !defined(BOOST_ASIO_WINDOWS_RUNTIME)
Chris@16 775 // && !defined(__CYGWIN__)
Chris@16 776 # endif // !defined(BOOST_ASIO_DISABLE_SIGACTION)
Chris@16 777 #endif // !defined(BOOST_ASIO_HAS_SIGACTION)
Chris@16 778
Chris@16 779 // Can use signal().
Chris@16 780 #if !defined(BOOST_ASIO_HAS_SIGNAL)
Chris@16 781 # if !defined(BOOST_ASIO_DISABLE_SIGNAL)
Chris@16 782 # if !defined(UNDER_CE)
Chris@16 783 # define BOOST_ASIO_HAS_SIGNAL 1
Chris@16 784 # endif // !defined(UNDER_CE)
Chris@16 785 # endif // !defined(BOOST_ASIO_DISABLE_SIGNAL)
Chris@16 786 #endif // !defined(BOOST_ASIO_HAS_SIGNAL)
Chris@16 787
Chris@101 788 // Can use getaddrinfo() and getnameinfo().
Chris@101 789 #if !defined(BOOST_ASIO_HAS_GETADDRINFO)
Chris@101 790 # if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
Chris@101 791 # if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0501)
Chris@101 792 # define BOOST_ASIO_HAS_GETADDRINFO 1
Chris@101 793 # elif defined(UNDER_CE)
Chris@101 794 # define BOOST_ASIO_HAS_GETADDRINFO 1
Chris@101 795 # endif // defined(UNDER_CE)
Chris@101 796 # elif !(defined(__MACH__) && defined(__APPLE__))
Chris@101 797 # define BOOST_ASIO_HAS_GETADDRINFO 1
Chris@101 798 # endif // !(defined(__MACH__) && defined(__APPLE__))
Chris@101 799 #endif // !defined(BOOST_ASIO_HAS_GETADDRINFO)
Chris@101 800
Chris@16 801 // Whether standard iostreams are disabled.
Chris@16 802 #if !defined(BOOST_ASIO_NO_IOSTREAM)
Chris@16 803 # if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_NO_IOSTREAM)
Chris@16 804 # define BOOST_ASIO_NO_IOSTREAM 1
Chris@16 805 # endif // !defined(BOOST_NO_IOSTREAM)
Chris@16 806 #endif // !defined(BOOST_ASIO_NO_IOSTREAM)
Chris@16 807
Chris@16 808 // Whether exception handling is disabled.
Chris@16 809 #if !defined(BOOST_ASIO_NO_EXCEPTIONS)
Chris@16 810 # if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_NO_EXCEPTIONS)
Chris@16 811 # define BOOST_ASIO_NO_EXCEPTIONS 1
Chris@16 812 # endif // !defined(BOOST_NO_EXCEPTIONS)
Chris@16 813 #endif // !defined(BOOST_ASIO_NO_EXCEPTIONS)
Chris@16 814
Chris@16 815 // Whether the typeid operator is supported.
Chris@16 816 #if !defined(BOOST_ASIO_NO_TYPEID)
Chris@16 817 # if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_NO_TYPEID)
Chris@16 818 # define BOOST_ASIO_NO_TYPEID 1
Chris@16 819 # endif // !defined(BOOST_NO_TYPEID)
Chris@16 820 #endif // !defined(BOOST_ASIO_NO_TYPEID)
Chris@16 821
Chris@16 822 // Threads.
Chris@16 823 #if !defined(BOOST_ASIO_HAS_THREADS)
Chris@16 824 # if !defined(BOOST_ASIO_DISABLE_THREADS)
Chris@16 825 # if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_HAS_THREADS)
Chris@16 826 # define BOOST_ASIO_HAS_THREADS 1
Chris@16 827 # elif defined(_MSC_VER) && defined(_MT)
Chris@16 828 # define BOOST_ASIO_HAS_THREADS 1
Chris@16 829 # elif defined(__BORLANDC__) && defined(__MT__)
Chris@16 830 # define BOOST_ASIO_HAS_THREADS 1
Chris@16 831 # elif defined(_POSIX_THREADS)
Chris@16 832 # define BOOST_ASIO_HAS_THREADS 1
Chris@16 833 # endif // defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_HAS_THREADS)
Chris@16 834 # endif // !defined(BOOST_ASIO_DISABLE_THREADS)
Chris@16 835 #endif // !defined(BOOST_ASIO_HAS_THREADS)
Chris@16 836
Chris@16 837 // POSIX threads.
Chris@16 838 #if !defined(BOOST_ASIO_HAS_PTHREADS)
Chris@16 839 # if defined(BOOST_ASIO_HAS_THREADS)
Chris@16 840 # if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_HAS_PTHREADS)
Chris@16 841 # define BOOST_ASIO_HAS_PTHREADS 1
Chris@16 842 # elif defined(_POSIX_THREADS)
Chris@16 843 # define BOOST_ASIO_HAS_PTHREADS 1
Chris@16 844 # endif // defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_HAS_PTHREADS)
Chris@16 845 # endif // defined(BOOST_ASIO_HAS_THREADS)
Chris@16 846 #endif // !defined(BOOST_ASIO_HAS_PTHREADS)
Chris@16 847
Chris@16 848 // Helper to prevent macro expansion.
Chris@16 849 #define BOOST_ASIO_PREVENT_MACRO_SUBSTITUTION
Chris@16 850
Chris@16 851 // Helper to define in-class constants.
Chris@16 852 #if !defined(BOOST_ASIO_STATIC_CONSTANT)
Chris@16 853 # if !defined(BOOST_ASIO_DISABLE_BOOST_STATIC_CONSTANT)
Chris@16 854 # define BOOST_ASIO_STATIC_CONSTANT(type, assignment) \
Chris@16 855 BOOST_STATIC_CONSTANT(type, assignment)
Chris@16 856 # else // !defined(BOOST_ASIO_DISABLE_BOOST_STATIC_CONSTANT)
Chris@16 857 # define BOOST_ASIO_STATIC_CONSTANT(type, assignment) \
Chris@16 858 static const type assignment
Chris@16 859 # endif // !defined(BOOST_ASIO_DISABLE_BOOST_STATIC_CONSTANT)
Chris@16 860 #endif // !defined(BOOST_ASIO_STATIC_CONSTANT)
Chris@16 861
Chris@16 862 // Boost array library.
Chris@16 863 #if !defined(BOOST_ASIO_HAS_BOOST_ARRAY)
Chris@16 864 # if !defined(BOOST_ASIO_DISABLE_BOOST_ARRAY)
Chris@16 865 # define BOOST_ASIO_HAS_BOOST_ARRAY 1
Chris@16 866 # endif // !defined(BOOST_ASIO_DISABLE_BOOST_ARRAY)
Chris@16 867 #endif // !defined(BOOST_ASIO_HAS_BOOST_ARRAY)
Chris@16 868
Chris@16 869 // Boost assert macro.
Chris@16 870 #if !defined(BOOST_ASIO_HAS_BOOST_ASSERT)
Chris@16 871 # if !defined(BOOST_ASIO_DISABLE_BOOST_ASSERT)
Chris@16 872 # define BOOST_ASIO_HAS_BOOST_ASSERT 1
Chris@16 873 # endif // !defined(BOOST_ASIO_DISABLE_BOOST_ASSERT)
Chris@16 874 #endif // !defined(BOOST_ASIO_HAS_BOOST_ASSERT)
Chris@16 875
Chris@16 876 // Boost limits header.
Chris@16 877 #if !defined(BOOST_ASIO_HAS_BOOST_LIMITS)
Chris@16 878 # if !defined(BOOST_ASIO_DISABLE_BOOST_LIMITS)
Chris@16 879 # define BOOST_ASIO_HAS_BOOST_LIMITS 1
Chris@16 880 # endif // !defined(BOOST_ASIO_DISABLE_BOOST_LIMITS)
Chris@16 881 #endif // !defined(BOOST_ASIO_HAS_BOOST_LIMITS)
Chris@16 882
Chris@16 883 // Boost throw_exception function.
Chris@16 884 #if !defined(BOOST_ASIO_HAS_BOOST_THROW_EXCEPTION)
Chris@16 885 # if !defined(BOOST_ASIO_DISABLE_BOOST_THROW_EXCEPTION)
Chris@16 886 # define BOOST_ASIO_HAS_BOOST_THROW_EXCEPTION 1
Chris@16 887 # endif // !defined(BOOST_ASIO_DISABLE_BOOST_THROW_EXCEPTION)
Chris@16 888 #endif // !defined(BOOST_ASIO_HAS_BOOST_THROW_EXCEPTION)
Chris@16 889
Chris@16 890 // Boost regex library.
Chris@16 891 #if !defined(BOOST_ASIO_HAS_BOOST_REGEX)
Chris@16 892 # if !defined(BOOST_ASIO_DISABLE_BOOST_REGEX)
Chris@16 893 # define BOOST_ASIO_HAS_BOOST_REGEX 1
Chris@16 894 # endif // !defined(BOOST_ASIO_DISABLE_BOOST_REGEX)
Chris@16 895 #endif // !defined(BOOST_ASIO_HAS_BOOST_REGEX)
Chris@16 896
Chris@16 897 // Boost bind function.
Chris@16 898 #if !defined(BOOST_ASIO_HAS_BOOST_BIND)
Chris@16 899 # if !defined(BOOST_ASIO_DISABLE_BOOST_BIND)
Chris@16 900 # define BOOST_ASIO_HAS_BOOST_BIND 1
Chris@16 901 # endif // !defined(BOOST_ASIO_DISABLE_BOOST_BIND)
Chris@16 902 #endif // !defined(BOOST_ASIO_HAS_BOOST_BIND)
Chris@16 903
Chris@16 904 // Boost's BOOST_WORKAROUND macro.
Chris@16 905 #if !defined(BOOST_ASIO_HAS_BOOST_WORKAROUND)
Chris@16 906 # if !defined(BOOST_ASIO_DISABLE_BOOST_WORKAROUND)
Chris@16 907 # define BOOST_ASIO_HAS_BOOST_WORKAROUND 1
Chris@16 908 # endif // !defined(BOOST_ASIO_DISABLE_BOOST_WORKAROUND)
Chris@16 909 #endif // !defined(BOOST_ASIO_HAS_BOOST_WORKAROUND)
Chris@16 910
Chris@16 911 // Microsoft Visual C++'s secure C runtime library.
Chris@16 912 #if !defined(BOOST_ASIO_HAS_SECURE_RTL)
Chris@16 913 # if !defined(BOOST_ASIO_DISABLE_SECURE_RTL)
Chris@16 914 # if defined(BOOST_ASIO_MSVC) \
Chris@16 915 && (BOOST_ASIO_MSVC >= 1400) \
Chris@16 916 && !defined(UNDER_CE)
Chris@16 917 # define BOOST_ASIO_HAS_SECURE_RTL 1
Chris@16 918 # endif // defined(BOOST_ASIO_MSVC)
Chris@16 919 // && (BOOST_ASIO_MSVC >= 1400)
Chris@16 920 // && !defined(UNDER_CE)
Chris@16 921 # endif // !defined(BOOST_ASIO_DISABLE_SECURE_RTL)
Chris@16 922 #endif // !defined(BOOST_ASIO_HAS_SECURE_RTL)
Chris@16 923
Chris@16 924 // Handler hooking. Disabled for ancient Borland C++ and gcc compilers.
Chris@16 925 #if !defined(BOOST_ASIO_HAS_HANDLER_HOOKS)
Chris@16 926 # if !defined(BOOST_ASIO_DISABLE_HANDLER_HOOKS)
Chris@16 927 # if defined(__GNUC__)
Chris@16 928 # if (__GNUC__ >= 3)
Chris@16 929 # define BOOST_ASIO_HAS_HANDLER_HOOKS 1
Chris@16 930 # endif // (__GNUC__ >= 3)
Chris@16 931 # elif !defined(__BORLANDC__)
Chris@16 932 # define BOOST_ASIO_HAS_HANDLER_HOOKS 1
Chris@16 933 # endif // !defined(__BORLANDC__)
Chris@16 934 # endif // !defined(BOOST_ASIO_DISABLE_HANDLER_HOOKS)
Chris@16 935 #endif // !defined(BOOST_ASIO_HAS_HANDLER_HOOKS)
Chris@16 936
Chris@16 937 // Support for the __thread keyword extension.
Chris@16 938 #if !defined(BOOST_ASIO_DISABLE_THREAD_KEYWORD_EXTENSION)
Chris@16 939 # if defined(__linux__)
Chris@16 940 # if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
Chris@16 941 # if ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)
Chris@16 942 # if !defined(__INTEL_COMPILER) && !defined(__ICL)
Chris@16 943 # define BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION 1
Chris@16 944 # define BOOST_ASIO_THREAD_KEYWORD __thread
Chris@16 945 # elif defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1100)
Chris@16 946 # define BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION 1
Chris@16 947 # endif // defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1100)
Chris@16 948 # endif // ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)
Chris@16 949 # endif // defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
Chris@16 950 # endif // defined(__linux__)
Chris@16 951 # if defined(BOOST_ASIO_MSVC) && defined(BOOST_ASIO_WINDOWS_RUNTIME)
Chris@16 952 # if (_MSC_VER >= 1700)
Chris@16 953 # define BOOST_ASIO_HAS_THREAD_KEYWORD_EXTENSION 1
Chris@16 954 # define BOOST_ASIO_THREAD_KEYWORD __declspec(thread)
Chris@16 955 # endif // (_MSC_VER >= 1700)
Chris@16 956 # endif // defined(BOOST_ASIO_MSVC) && defined(BOOST_ASIO_WINDOWS_RUNTIME)
Chris@16 957 #endif // !defined(BOOST_ASIO_DISABLE_THREAD_KEYWORD_EXTENSION)
Chris@16 958 #if !defined(BOOST_ASIO_THREAD_KEYWORD)
Chris@16 959 # define BOOST_ASIO_THREAD_KEYWORD __thread
Chris@16 960 #endif // !defined(BOOST_ASIO_THREAD_KEYWORD)
Chris@16 961
Chris@16 962 // Support for POSIX ssize_t typedef.
Chris@16 963 #if !defined(BOOST_ASIO_DISABLE_SSIZE_T)
Chris@16 964 # if defined(__linux__) \
Chris@16 965 || (defined(__MACH__) && defined(__APPLE__))
Chris@16 966 # define BOOST_ASIO_HAS_SSIZE_T 1
Chris@16 967 # endif // defined(__linux__)
Chris@16 968 // || (defined(__MACH__) && defined(__APPLE__))
Chris@16 969 #endif // !defined(BOOST_ASIO_DISABLE_SSIZE_T)
Chris@16 970
Chris@16 971 #endif // BOOST_ASIO_DETAIL_CONFIG_HPP