blob: 2b2d6da93a671f3c9ecffeb6614f98c8772fdb52 [file] [log] [blame]
[/
/ Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff dot com)
/
/ Distributed under the Boost Software License, Version 1.0. (See accompanying
/ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
/]
[heading Compiler/platform feature detection macros]
Asio automatically defines preprocessor macros corresponding to the detected
available features on a particular compiler and target platform. These macros
are named with the prefix `ASIO_HAS_`, and are listed in the table below.
Many of these macros also have a corresponding `ASIO_DISABLE_` macro that may
be used to explicitly disable the feature.
In general, `ASIO_HAS_` macros should not be explicitly defined by the user,
except when absolutely required as a workaround for the latest version of a
compiler or platform. For older compiler/platform combinations where a specific
`ASIO_HAS_` macro is not automatically defined, testing may have shown that a
claimed feature isn't sufficiently conformant to be compatible with Asio's
needs.
[table
[[Macro][Description][Macro to disable feature]]
[
[`ASIO_HAS_ALIAS_TEMPLATES`]
[
Support alias templates on compilers known to allow it.
]
[`ASIO_DISABLE_ALIAS_TEMPLATES`]
]
[
[`ASIO_HAS_BOOST_ARRAY`]
[
Boost array library.
]
[`ASIO_DISABLE_BOOST_ARRAY`]
]
[
[`ASIO_HAS_BOOST_ASSERT`]
[
Boost assert macro.
]
[`ASIO_DISABLE_BOOST_ASSERT`]
]
[
[`ASIO_HAS_BOOST_BIND`]
[
Boost bind function.
]
[`ASIO_DISABLE_BOOST_BIND`]
]
[
[`ASIO_HAS_BOOST_CHRONO`]
[
Boost support for chrono.
]
[`ASIO_DISABLE_BOOST_CHRONO`]
]
[
[`ASIO_HAS_BOOST_CONFIG`]
[
boostify: non-boost code ends here
]
[]
]
[
[`ASIO_HAS_BOOST_DATE_TIME`]
[
Boost support for the DateTime library.
]
[`ASIO_DISABLE_BOOST_DATE_TIME`]
]
[
[`ASIO_HAS_BOOST_LIMITS`]
[
Boost limits header.
]
[`ASIO_DISABLE_BOOST_LIMITS`]
]
[
[`ASIO_HAS_BOOST_REGEX`]
[
Boost regex library.
]
[`ASIO_DISABLE_BOOST_REGEX`]
]
[
[`ASIO_HAS_BOOST_THROW_EXCEPTION`]
[
Boost throw_exception function.
]
[`ASIO_DISABLE_BOOST_THROW_EXCEPTION`]
]
[
[`ASIO_HAS_BOOST_WORKAROUND`]
[
Boost's BOOST_WORKAROUND macro.
]
[`ASIO_DISABLE_BOOST_WORKAROUND`]
]
[
[`ASIO_HAS_CHRONO`]
[
Some form of chrono library is available.
]
[]
]
[
[`ASIO_HAS_CLANG_LIBCXX`]
[
Clang / libc++ detection.
]
[]
]
[
[`ASIO_HAS_CONCEPTS`]
[
Support concepts on compilers known to allow them.
]
[`ASIO_DISABLE_CONCEPTS`]
]
[
[`ASIO_HAS_CONSTANT_EXPRESSION_SFINAE`]
[
Support SFINAE use of constant expressions on compilers known to allow it.
]
[`ASIO_DISABLE_CONSTANT_EXPRESSION_SFINAE`]
]
[
[`ASIO_HAS_CONSTEXPR`]
[
Support constexpr on compilers known to allow it.
]
[`ASIO_DISABLE_CONSTEXPR`]
]
[
[`ASIO_HAS_CO_AWAIT`]
[
Support the co_await keyword on compilers known to allow it.
]
[`ASIO_DISABLE_CO_AWAIT`]
]
[
[`ASIO_HAS_CSTDINT`]
[
Standard library support for the cstdint header.
]
[`ASIO_DISABLE_CSTDINT`]
]
[
[`ASIO_HAS_CXX11_ALLOCATORS`]
[
Standard library support for the C++11 allocator additions.
]
[`ASIO_DISABLE_CXX11_ALLOCATORS`]
]
[
[`ASIO_HAS_DECLTYPE`]
[
Support automatic type deduction on compilers known to support it.
]
[`ASIO_DISABLE_DECLTYPE`]
]
[
[`ASIO_HAS_DEFAULT_FUNCTION_TEMPLATE_ARGUMENTS`]
[
Support default function template arguments on compilers known to allow it.
]
[`ASIO_DISABLE_DEFAULT_FUNCTION_TEMPLATE_ARGUMENTS`]
]
[
[`ASIO_HAS_DEV_POLL`]
[
Solaris: /dev/poll.
]
[`ASIO_DISABLE_DEV_POLL`]
]
[
[`ASIO_HAS_EPOLL`]
[
Linux: epoll, eventfd and timerfd.
]
[`ASIO_DISABLE_EPOLL`]
]
[
[`ASIO_HAS_EVENTFD`]
[
Linux: epoll, eventfd and timerfd.
]
[`ASIO_DISABLE_EVENTFD`]
]
[
[`ASIO_HAS_GETADDRINFO`]
[
Can use getaddrinfo() and getnameinfo().
]
[`ASIO_DISABLE_GETADDRINFO`]
]
[
[`ASIO_HAS_HANDLER_HOOKS`]
[
Handler hooking. Disabled for ancient Borland C++ and gcc compilers.
]
[`ASIO_DISABLE_HANDLER_HOOKS`]
]
[
[`ASIO_HAS_IOCP`]
[
Windows: IO Completion Ports.
]
[`ASIO_DISABLE_IOCP`]
]
[
[`ASIO_HAS_KQUEUE`]
[
Mac OS X, FreeBSD, NetBSD, OpenBSD: kqueue.
]
[`ASIO_DISABLE_KQUEUE`]
]
[
[`ASIO_HAS_LOCAL_SOCKETS`]
[
UNIX domain sockets.
]
[`ASIO_DISABLE_LOCAL_SOCKETS`]
]
[
[`ASIO_HAS_MOVE`]
[
Support move construction and assignment on compilers known to allow it.
]
[`ASIO_DISABLE_MOVE`]
]
[
[`ASIO_HAS_MSG_NOSIGNAL`]
[
Kernel support for MSG_NOSIGNAL.
]
[]
]
[
[`ASIO_HAS_NOEXCEPT`]
[
Support noexcept on compilers known to allow it.
]
[`ASIO_DISABLE_NOEXCEPT`]
]
[
[`ASIO_HAS_NULLPTR`]
[
Standard library support for the nullptr_t type.
]
[`ASIO_DISABLE_NULLPTR`]
]
[
[`ASIO_HAS_POSIX_STREAM_DESCRIPTOR`]
[
POSIX: stream-oriented file descriptors.
]
[`ASIO_DISABLE_POSIX_STREAM_DESCRIPTOR`]
]
[
[`ASIO_HAS_PTHREADS`]
[
POSIX threads.
]
[]
]
[
[`ASIO_HAS_REF_QUALIFIED_FUNCTIONS`]
[
Support ref-qualified functions on compilers known to allow it.
]
[`ASIO_DISABLE_REF_QUALIFIED_FUNCTIONS`]
]
[
[`ASIO_HAS_RETURN_TYPE_DEDUCTION`]
[
Support return type deduction on compilers known to allow it.
]
[`ASIO_DISABLE_RETURN_TYPE_DEDUCTION`]
]
[
[`ASIO_HAS_SECURE_RTL`]
[
Microsoft Visual C++'s secure C runtime library.
]
[`ASIO_DISABLE_SECURE_RTL`]
]
[
[`ASIO_HAS_SERIAL_PORT`]
[
Serial ports.
]
[`ASIO_DISABLE_SERIAL_PORT`]
]
[
[`ASIO_HAS_SFINAE_VARIABLE_TEMPLATES`]
[
Support SFINAEd template variables on compilers known to allow it.
]
[`ASIO_DISABLE_SFINAE_VARIABLE_TEMPLATES`]
]
[
[`ASIO_HAS_SIGACTION`]
[
Can use sigaction() instead of signal().
]
[`ASIO_DISABLE_SIGACTION`]
]
[
[`ASIO_HAS_SIGNAL`]
[
Can use signal().
]
[`ASIO_DISABLE_SIGNAL`]
]
[
[`ASIO_HAS_SOURCE_LOCATION`]
[
Standard library has a source_location that we can use.
]
[`ASIO_DISABLE_SOURCE_LOCATION`]
]
[
[`ASIO_HAS_SSIZE_T`]
[
Support for POSIX ssize_t typedef.
]
[`ASIO_DISABLE_SSIZE_T`]
]
[
[`ASIO_HAS_STD_ADDRESSOF`]
[
Standard library support for addressof.
]
[`ASIO_DISABLE_STD_ADDRESSOF`]
]
[
[`ASIO_HAS_STD_ALLOCATOR_ARG`]
[
Standard library support for allocator_arg_t.
]
[`ASIO_DISABLE_STD_ALLOCATOR_ARG`]
]
[
[`ASIO_HAS_STD_ANY`]
[
Standard library support for std::any.
]
[`ASIO_DISABLE_STD_ANY`]
]
[
[`ASIO_HAS_STD_ARRAY`]
[
Standard library support for arrays.
]
[`ASIO_DISABLE_STD_ARRAY`]
]
[
[`ASIO_HAS_STD_ATOMIC`]
[
Standard library support for atomic operations.
]
[`ASIO_DISABLE_STD_ATOMIC`]
]
[
[`ASIO_HAS_STD_CALL_ONCE`]
[
Standard library support for the call_once function.
]
[`ASIO_DISABLE_STD_CALL_ONCE`]
]
[
[`ASIO_HAS_STD_CHRONO`]
[
Standard library support for chrono. Some standard libraries (such as the
libstdc++ shipped with gcc 4.6) provide monotonic_clock as per early C++0x
drafts, rather than the eventually standardised name of steady_clock.
]
[`ASIO_DISABLE_STD_CHRONO`]
]
[
[`ASIO_HAS_STD_CHRONO_MONOTONIC_CLOCK`]
[
Standard library support for chrono. Some standard libraries (such as the
libstdc++ shipped with gcc 4.6) provide monotonic_clock as per early C++0x
drafts, rather than the eventually standardised name of steady_clock.
]
[]
]
[
[`ASIO_HAS_STD_COROUTINE`]
[
Standard library support for coroutines.
]
[`ASIO_DISABLE_STD_COROUTINE`]
]
[
[`ASIO_HAS_STD_EXCEPTION_PTR`]
[
Standard library support for std::exception_ptr and std::current_exception.
]
[`ASIO_DISABLE_STD_EXCEPTION_PTR`]
]
[
[`ASIO_HAS_STD_EXPERIMENTAL_SOURCE_LOCATION`]
[
Standard library support for std::experimental::source_location.
]
[`ASIO_DISABLE_STD_EXPERIMENTAL_SOURCE_LOCATION`]
]
[
[`ASIO_HAS_STD_EXPERIMENTAL_STRING_VIEW`]
[
Standard library support for std::experimental::string_view.
]
[`ASIO_DISABLE_STD_EXPERIMENTAL_STRING_VIEW`]
]
[
[`ASIO_HAS_STD_FUNCTION`]
[
Standard library support for the function class.
]
[`ASIO_DISABLE_STD_FUNCTION`]
]
[
[`ASIO_HAS_STD_FUTURE`]
[
Standard library support for futures.
]
[`ASIO_DISABLE_STD_FUTURE`]
]
[
[`ASIO_HAS_STD_HASH`]
[
Standard library support for std::hash.
]
[`ASIO_DISABLE_STD_HASH`]
]
[
[`ASIO_HAS_STD_INVOKE_RESULT`]
[
Standard library has invoke_result (which supersedes result_of).
]
[`ASIO_DISABLE_STD_INVOKE_RESULT`]
]
[
[`ASIO_HAS_STD_IOSTREAM_MOVE`]
[
Standard library support for iostream move construction and assignment.
]
[`ASIO_DISABLE_STD_IOSTREAM_MOVE`]
]
[
[`ASIO_HAS_STD_MUTEX_AND_CONDVAR`]
[
Standard library support for the mutex and condition variable classes.
]
[`ASIO_DISABLE_STD_MUTEX_AND_CONDVAR`]
]
[
[`ASIO_HAS_STD_NESTED_EXCEPTION`]
[
Standard library support for std::nested_exception.
]
[`ASIO_DISABLE_STD_NESTED_EXCEPTION`]
]
[
[`ASIO_HAS_STD_SHARED_PTR`]
[
Standard library support for shared_ptr and weak_ptr.
]
[`ASIO_DISABLE_STD_SHARED_PTR`]
]
[
[`ASIO_HAS_STD_STRING_VIEW`]
[
Standard library support for std::string_view.
]
[`ASIO_DISABLE_STD_STRING_VIEW`]
]
[
[`ASIO_HAS_STD_SYSTEM_ERROR`]
[
Standard library support for system errors.
]
[`ASIO_DISABLE_STD_SYSTEM_ERROR`]
]
[
[`ASIO_HAS_STD_THREAD`]
[
Standard library support for the thread class.
]
[`ASIO_DISABLE_STD_THREAD`]
]
[
[`ASIO_HAS_STD_TYPE_TRAITS`]
[
Standard library support for type traits.
]
[`ASIO_DISABLE_STD_TYPE_TRAITS`]
]
[
[`ASIO_HAS_STRING_VIEW`]
[
Standard library has a string_view that we can use.
]
[`ASIO_DISABLE_STRING_VIEW`]
]
[
[`ASIO_HAS_THREADS`]
[
Threads.
]
[`ASIO_DISABLE_THREADS`]
]
[
[`ASIO_HAS_THREAD_KEYWORD_EXTENSION`]
[
Support for the __thread keyword extension.
]
[`ASIO_DISABLE_THREAD_KEYWORD_EXTENSION`]
]
[
[`ASIO_HAS_TIMERFD`]
[
Linux: epoll, eventfd and timerfd.
]
[]
]
[
[`ASIO_HAS_UNISTD_H`]
[
On POSIX (and POSIX-like) platforms we need to include unistd.h in order to
get access to the various platform feature macros, e.g. to be able to test
for threads support.
]
[]
]
[
[`ASIO_HAS_VARIABLE_TEMPLATES`]
[
Support template variables on compilers known to allow it.
]
[`ASIO_DISABLE_VARIABLE_TEMPLATES`]
]
[
[`ASIO_HAS_VARIADIC_TEMPLATES`]
[
Support variadic templates on compilers known to allow it.
]
[`ASIO_DISABLE_VARIADIC_TEMPLATES`]
]
[
[`ASIO_HAS_WINDOWS_OBJECT_HANDLE`]
[
Windows: object handles.
]
[`ASIO_DISABLE_WINDOWS_OBJECT_HANDLE`]
]
[
[`ASIO_HAS_WINDOWS_OVERLAPPED_PTR`]
[
Windows: OVERLAPPED wrapper.
]
[`ASIO_DISABLE_WINDOWS_OVERLAPPED_PTR`]
]
[
[`ASIO_HAS_WINDOWS_RANDOM_ACCESS_HANDLE`]
[
Windows: random access handles.
]
[`ASIO_DISABLE_WINDOWS_RANDOM_ACCESS_HANDLE`]
]
[
[`ASIO_HAS_WINDOWS_STREAM_HANDLE`]
[
Windows: stream handles.
]
[`ASIO_DISABLE_WINDOWS_STREAM_HANDLE`]
]
[
[`ASIO_HAS_WORKING_EXPRESSION_SFINAE`]
[
Enable workarounds for lack of working expression SFINAE.
]
[`ASIO_DISABLE_WORKING_EXPRESSION_SFINAE`]
]
]