diff --git a/Jamroot b/Jamroot
index e07701e..4e913c2 100644
--- a/Jamroot
+++ b/Jamroot
@@ -140,10 +140,11 @@ import "class" : new ;
import property-set ;
import threadapi-feature ;
import option ;
-import tools/boost_install/boost-install ;
+# Backslash because of `bcp --namespace`
+import tools/boost\_install/boost-install ;
path-constant BOOST_ROOT : . ;
-constant BOOST_VERSION : 1.70.0 ;
+constant BOOST_VERSION : 1.71.0 ;
constant BOOST_JAMROOT_MODULE : $(__name__) ;
boostcpp.set-version $(BOOST_VERSION) ;
@@ -311,8 +312,8 @@ rule boost-install ( libraries * )
# stage and install targets via boost-install, above.
rule boost-lib ( name : sources * : requirements * : default-build * : usage-requirements * )
{
+ autolink = shared:BOOST_$(name:U)_DYN_LINK=1 ;
name = boost_$(name) ;
- autolink = shared:$(name:U)_DYN_LINK=1 ;
lib $(name)
: $(sources)
: $(requirements) $(autolink)
diff --git a/Readme.md b/Readme.md
index be550e7..8ccb084 100644
--- a/Readme.md
+++ b/Readme.md
@@ -1,7 +1,7 @@
Boost libraries - trimmed down for Citra
========================================
-This is a subset of Boost v1.70.0 generated using the bcp tool. To get a list of boost modules guaranteed to exist, check the build script.
+This is a subset of Boost v1.71.0 generated using the bcp tool. To get a list of boost modules guaranteed to exist, check the build script.
Updating this repo (on Windows)
===============================
diff --git a/boost/algorithm/minmax_element.hpp b/boost/algorithm/minmax_element.hpp
deleted file mode 100644
index 752f6cb..0000000
--- a/boost/algorithm/minmax_element.hpp
+++ /dev/null
@@ -1,553 +0,0 @@
-// (C) Copyright Herve Bronnimann 2004.
-//
-// 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)
-
-/*
- Revision history:
- 1 July 2004
- Split the code into two headers to lessen dependence on
- Boost.tuple. (Herve)
- 26 June 2004
- Added the code for the boost minmax library. (Herve)
-*/
-
-#ifndef BOOST_ALGORITHM_MINMAX_ELEMENT_HPP
-#define BOOST_ALGORITHM_MINMAX_ELEMENT_HPP
-
-/* PROPOSED STANDARD EXTENSIONS:
- *
- * minmax_element(first, last)
- * Effect: std::make_pair( std::min_element(first, last),
- * std::max_element(first, last) );
- *
- * minmax_element(first, last, comp)
- * Effect: std::make_pair( std::min_element(first, last, comp),
- * std::max_element(first, last, comp) );
- */
-
-#include // for std::pair and std::make_pair
-
-namespace boost {
-
- namespace detail { // for obtaining a uniform version of minmax_element
- // that compiles with VC++ 6.0 -- avoid the iterator_traits by
- // having comparison object over iterator, not over dereferenced value
-
- template
- struct less_over_iter {
- bool operator()(Iterator const& it1,
- Iterator const& it2) const { return *it1 < *it2; }
- };
-
- template
- struct binary_pred_over_iter {
- explicit binary_pred_over_iter(BinaryPredicate const& p ) : m_p( p ) {}
- bool operator()(Iterator const& it1,
- Iterator const& it2) const { return m_p(*it1, *it2); }
- private:
- BinaryPredicate m_p;
- };
-
- // common base for the two minmax_element overloads
-
- template
- std::pair
- basic_minmax_element(ForwardIter first, ForwardIter last, Compare comp)
- {
- if (first == last)
- return std::make_pair(last,last);
-
- ForwardIter min_result = first;
- ForwardIter max_result = first;
-
- // if only one element
- ForwardIter second = first; ++second;
- if (second == last)
- return std::make_pair(min_result, max_result);
-
- // treat first pair separately (only one comparison for first two elements)
- ForwardIter potential_min_result = last;
- if (comp(first, second))
- max_result = second;
- else {
- min_result = second;
- potential_min_result = first;
- }
-
- // then each element by pairs, with at most 3 comparisons per pair
- first = ++second; if (first != last) ++second;
- while (second != last) {
- if (comp(first, second)) {
- if (comp(first, min_result)) {
- min_result = first;
- potential_min_result = last;
- }
- if (comp(max_result, second))
- max_result = second;
- } else {
- if (comp(second, min_result)) {
- min_result = second;
- potential_min_result = first;
- }
- if (comp(max_result, first))
- max_result = first;
- }
- first = ++second;
- if (first != last) ++second;
- }
-
- // if odd number of elements, treat last element
- if (first != last) { // odd number of elements
- if (comp(first, min_result)) {
- min_result = first;
- potential_min_result = last;
- }
- else if (comp(max_result, first))
- max_result = first;
- }
-
- // resolve min_result being incorrect with one extra comparison
- // (in which case potential_min_result is necessarily the correct result)
- if (potential_min_result != last
- && !comp(min_result, potential_min_result))
- min_result = potential_min_result;
-
- return std::make_pair(min_result,max_result);
- }
-
- } // namespace detail
-
- template
- std::pair
- minmax_element(ForwardIter first, ForwardIter last)
- {
- return detail::basic_minmax_element(first, last,
- detail::less_over_iter() );
- }
-
- template
- std::pair
- minmax_element(ForwardIter first, ForwardIter last, BinaryPredicate comp)
- {
- return detail::basic_minmax_element(first, last,
- detail::binary_pred_over_iter(comp) );
- }
-
-}
-
-/* PROPOSED BOOST EXTENSIONS
- * In the description below, [rfirst,rlast) denotes the reversed range
- * of [first,last). Even though the iterator type of first and last may
- * be only a Forward Iterator, it is possible to explain the semantics
- * by assuming that it is a Bidirectional Iterator. In the sequel,
- * reverse(ForwardIterator&) returns the reverse_iterator adaptor.
- * This is not how the functions would be implemented!
- *
- * first_min_element(first, last)
- * Effect: std::min_element(first, last);
- *
- * first_min_element(first, last, comp)
- * Effect: std::min_element(first, last, comp);
- *
- * last_min_element(first, last)
- * Effect: reverse( std::min_element(reverse(last), reverse(first)) );
- *
- * last_min_element(first, last, comp)
- * Effect: reverse( std::min_element(reverse(last), reverse(first), comp) );
- *
- * first_max_element(first, last)
- * Effect: std::max_element(first, last);
- *
- * first_max_element(first, last, comp)
- * Effect: max_element(first, last);
- *
- * last_max_element(first, last)
- * Effect: reverse( std::max_element(reverse(last), reverse(first)) );
- *
- * last_max_element(first, last, comp)
- * Effect: reverse( std::max_element(reverse(last), reverse(first), comp) );
- *
- * first_min_first_max_element(first, last)
- * Effect: std::make_pair( first_min_element(first, last),
- * first_max_element(first, last) );
- *
- * first_min_first_max_element(first, last, comp)
- * Effect: std::make_pair( first_min_element(first, last, comp),
- * first_max_element(first, last, comp) );
- *
- * first_min_last_max_element(first, last)
- * Effect: std::make_pair( first_min_element(first, last),
- * last_max_element(first, last) );
- *
- * first_min_last_max_element(first, last, comp)
- * Effect: std::make_pair( first_min_element(first, last, comp),
- * last_max_element(first, last, comp) );
- *
- * last_min_first_max_element(first, last)
- * Effect: std::make_pair( last_min_element(first, last),
- * first_max_element(first, last) );
- *
- * last_min_first_max_element(first, last, comp)
- * Effect: std::make_pair( last_min_element(first, last, comp),
- * first_max_element(first, last, comp) );
- *
- * last_min_last_max_element(first, last)
- * Effect: std::make_pair( last_min_element(first, last),
- * last_max_element(first, last) );
- *
- * last_min_last_max_element(first, last, comp)
- * Effect: std::make_pair( last_min_element(first, last, comp),
- * last_max_element(first, last, comp) );
- */
-
-namespace boost {
-
- // Min_element and max_element variants
-
- namespace detail { // common base for the overloads
-
- template
- ForwardIter
- basic_first_min_element(ForwardIter first, ForwardIter last,
- BinaryPredicate comp)
- {
- if (first == last) return last;
- ForwardIter min_result = first;
- while (++first != last)
- if (comp(first, min_result))
- min_result = first;
- return min_result;
- }
-
- template
- ForwardIter
- basic_last_min_element(ForwardIter first, ForwardIter last,
- BinaryPredicate comp)
- {
- if (first == last) return last;
- ForwardIter min_result = first;
- while (++first != last)
- if (!comp(min_result, first))
- min_result = first;
- return min_result;
- }
-
- template
- ForwardIter
- basic_first_max_element(ForwardIter first, ForwardIter last,
- BinaryPredicate comp)
- {
- if (first == last) return last;
- ForwardIter max_result = first;
- while (++first != last)
- if (comp(max_result, first))
- max_result = first;
- return max_result;
- }
-
- template
- ForwardIter
- basic_last_max_element(ForwardIter first, ForwardIter last,
- BinaryPredicate comp)
- {
- if (first == last) return last;
- ForwardIter max_result = first;
- while (++first != last)
- if (!comp(first, max_result))
- max_result = first;
- return max_result;
- }
-
- } // namespace detail
-
- template
- ForwardIter
- first_min_element(ForwardIter first, ForwardIter last)
- {
- return detail::basic_first_min_element(first, last,
- detail::less_over_iter() );
- }
-
- template
- ForwardIter
- first_min_element(ForwardIter first, ForwardIter last, BinaryPredicate comp)
- {
- return detail::basic_first_min_element(first, last,
- detail::binary_pred_over_iter(comp) );
- }
-
- template
- ForwardIter
- last_min_element(ForwardIter first, ForwardIter last)
- {
- return detail::basic_last_min_element(first, last,
- detail::less_over_iter() );
- }
-
- template
- ForwardIter
- last_min_element(ForwardIter first, ForwardIter last, BinaryPredicate comp)
- {
- return detail::basic_last_min_element(first, last,
- detail::binary_pred_over_iter(comp) );
- }
-
- template
- ForwardIter
- first_max_element(ForwardIter first, ForwardIter last)
- {
- return detail::basic_first_max_element(first, last,
- detail::less_over_iter() );
- }
-
- template
- ForwardIter
- first_max_element(ForwardIter first, ForwardIter last, BinaryPredicate comp)
- {
- return detail::basic_first_max_element(first, last,
- detail::binary_pred_over_iter(comp) );
- }
-
- template
- ForwardIter
- last_max_element(ForwardIter first, ForwardIter last)
- {
- return detail::basic_last_max_element(first, last,
- detail::less_over_iter() );
- }
-
- template
- ForwardIter
- last_max_element(ForwardIter first, ForwardIter last, BinaryPredicate comp)
- {
- return detail::basic_last_max_element(first, last,
- detail::binary_pred_over_iter(comp) );
- }
-
-
- // Minmax_element variants -- comments removed
-
- namespace detail {
-
- template
- std::pair
- basic_first_min_last_max_element(ForwardIter first, ForwardIter last,
- BinaryPredicate comp)
- {
- if (first == last)
- return std::make_pair(last,last);
-
- ForwardIter min_result = first;
- ForwardIter max_result = first;
-
- ForwardIter second = ++first;
- if (second == last)
- return std::make_pair(min_result, max_result);
-
- if (comp(second, min_result))
- min_result = second;
- else
- max_result = second;
-
- first = ++second; if (first != last) ++second;
- while (second != last) {
- if (!comp(second, first)) {
- if (comp(first, min_result))
- min_result = first;
- if (!comp(second, max_result))
- max_result = second;
- } else {
- if (comp(second, min_result))
- min_result = second;
- if (!comp(first, max_result))
- max_result = first;
- }
- first = ++second; if (first != last) ++second;
- }
-
- if (first != last) {
- if (comp(first, min_result))
- min_result = first;
- else if (!comp(first, max_result))
- max_result = first;
- }
-
- return std::make_pair(min_result, max_result);
- }
-
- template
- std::pair
- basic_last_min_first_max_element(ForwardIter first, ForwardIter last,
- BinaryPredicate comp)
- {
- if (first == last) return std::make_pair(last,last);
-
- ForwardIter min_result = first;
- ForwardIter max_result = first;
-
- ForwardIter second = ++first;
- if (second == last)
- return std::make_pair(min_result, max_result);
-
- if (comp(max_result, second))
- max_result = second;
- else
- min_result = second;
-
- first = ++second; if (first != last) ++second;
- while (second != last) {
- if (comp(first, second)) {
- if (!comp(min_result, first))
- min_result = first;
- if (comp(max_result, second))
- max_result = second;
- } else {
- if (!comp(min_result, second))
- min_result = second;
- if (comp(max_result, first))
- max_result = first;
- }
- first = ++second; if (first != last) ++second;
- }
-
- if (first != last) {
- if (!comp(min_result, first))
- min_result = first;
- else if (comp(max_result, first))
- max_result = first;
- }
-
- return std::make_pair(min_result, max_result);
- }
-
- template
- std::pair
- basic_last_min_last_max_element(ForwardIter first, ForwardIter last,
- BinaryPredicate comp)
- {
- if (first == last) return std::make_pair(last,last);
-
- ForwardIter min_result = first;
- ForwardIter max_result = first;
-
- ForwardIter second = first; ++second;
- if (second == last)
- return std::make_pair(min_result,max_result);
-
- ForwardIter potential_max_result = last;
- if (comp(first, second))
- max_result = second;
- else {
- min_result = second;
- potential_max_result = second;
- }
-
- first = ++second; if (first != last) ++second;
- while (second != last) {
- if (comp(first, second)) {
- if (!comp(min_result, first))
- min_result = first;
- if (!comp(second, max_result)) {
- max_result = second;
- potential_max_result = last;
- }
- } else {
- if (!comp(min_result, second))
- min_result = second;
- if (!comp(first, max_result)) {
- max_result = first;
- potential_max_result = second;
- }
- }
- first = ++second;
- if (first != last) ++second;
- }
-
- if (first != last) {
- if (!comp(min_result, first))
- min_result = first;
- if (!comp(first, max_result)) {
- max_result = first;
- potential_max_result = last;
- }
- }
-
- if (potential_max_result != last
- && !comp(potential_max_result, max_result))
- max_result = potential_max_result;
-
- return std::make_pair(min_result,max_result);
- }
-
- } // namespace detail
-
- template
- inline std::pair
- first_min_first_max_element(ForwardIter first, ForwardIter last)
- {
- return minmax_element(first, last);
- }
-
- template
- inline std::pair
- first_min_first_max_element(ForwardIter first, ForwardIter last,
- BinaryPredicate comp)
- {
- return minmax_element(first, last, comp);
- }
-
- template
- std::pair
- first_min_last_max_element(ForwardIter first, ForwardIter last)
- {
- return detail::basic_first_min_last_max_element(first, last,
- detail::less_over_iter() );
- }
-
- template
- inline std::pair
- first_min_last_max_element(ForwardIter first, ForwardIter last,
- BinaryPredicate comp)
- {
- return detail::basic_first_min_last_max_element(first, last,
- detail::binary_pred_over_iter(comp) );
- }
-
- template
- std::pair
- last_min_first_max_element(ForwardIter first, ForwardIter last)
- {
- return detail::basic_last_min_first_max_element(first, last,
- detail::less_over_iter() );
- }
-
- template
- inline std::pair
- last_min_first_max_element(ForwardIter first, ForwardIter last,
- BinaryPredicate comp)
- {
- return detail::basic_last_min_first_max_element(first, last,
- detail::binary_pred_over_iter(comp) );
- }
-
- template
- std::pair
- last_min_last_max_element(ForwardIter first, ForwardIter last)
- {
- return detail::basic_last_min_last_max_element(first, last,
- detail::less_over_iter() );
- }
-
- template
- inline std::pair
- last_min_last_max_element(ForwardIter first, ForwardIter last,
- BinaryPredicate comp)
- {
- return detail::basic_last_min_last_max_element(first, last,
- detail::binary_pred_over_iter(comp) );
- }
-
-} // namespace boost
-
-#endif // BOOST_ALGORITHM_MINMAX_ELEMENT_HPP
diff --git a/boost/asio/basic_serial_port.hpp b/boost/asio/basic_serial_port.hpp
index 88a195a..55144ee 100644
--- a/boost/asio/basic_serial_port.hpp
+++ b/boost/asio/basic_serial_port.hpp
@@ -554,7 +554,7 @@ public:
* boost::asio::serial_port_base::character_size
*/
template
- void get_option(GettableSerialPortOption& option)
+ void get_option(GettableSerialPortOption& option) const
{
boost::system::error_code ec;
impl_.get_service().get_option(impl_.get_implementation(), option, ec);
@@ -579,7 +579,7 @@ public:
*/
template
BOOST_ASIO_SYNC_OP_VOID get_option(GettableSerialPortOption& option,
- boost::system::error_code& ec)
+ boost::system::error_code& ec) const
{
impl_.get_service().get_option(impl_.get_implementation(), option, ec);
BOOST_ASIO_SYNC_OP_VOID_RETURN(ec);
diff --git a/boost/asio/buffer.hpp b/boost/asio/buffer.hpp
index 6958b2e..1f12cac 100644
--- a/boost/asio/buffer.hpp
+++ b/boost/asio/buffer.hpp
@@ -2476,7 +2476,7 @@ struct is_dynamic_buffer_v2
* If @c BOOST_ASIO_NO_DYNAMIC_BUFFER_V1 is not defined, determines whether the
* type satisfies the DynamicBuffer_v1 requirements. Otherwise, if @c
* BOOST_ASIO_NO_DYNAMIC_BUFFER_V1 is defined, determines whether the type
- * satisfies the DynamicBuffer_v1 requirements.
+ * satisfies the DynamicBuffer_v2 requirements.
*/
template
struct is_dynamic_buffer
diff --git a/boost/asio/detail/config.hpp b/boost/asio/detail/config.hpp
index 8fef292..683a2b1 100644
--- a/boost/asio/detail/config.hpp
+++ b/boost/asio/detail/config.hpp
@@ -341,7 +341,7 @@
// Compliant C++11 compilers put noexcept specifiers on error_category members.
#if !defined(BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT)
-# if (BOOST_VERSION >= 105300)
+# if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && (BOOST_VERSION >= 105300)
# define BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT BOOST_NOEXCEPT
# elif defined(__clang__)
# if __has_feature(__cxx_noexcept__)
@@ -508,9 +508,9 @@
// Boost support for chrono.
#if !defined(BOOST_ASIO_HAS_BOOST_CHRONO)
# if !defined(BOOST_ASIO_DISABLE_BOOST_CHRONO)
-# if (BOOST_VERSION >= 104700)
+# if defined(BOOST_ASIO_HAS_BOOST_CONFIG) && (BOOST_VERSION >= 104700)
# define BOOST_ASIO_HAS_BOOST_CHRONO 1
-# endif // (BOOST_VERSION >= 104700)
+# endif // defined(BOOST_ASIO_HAS_BOOST_CONFIG) && (BOOST_VERSION >= 104700)
# endif // !defined(BOOST_ASIO_DISABLE_BOOST_CHRONO)
#endif // !defined(BOOST_ASIO_HAS_BOOST_CHRONO)
@@ -1232,6 +1232,8 @@
# define BOOST_ASIO_HAS_THREADS 1
# elif defined(__APPLE__)
# define BOOST_ASIO_HAS_THREADS 1
+# elif defined(__HAIKU__)
+# define BOOST_ASIO_HAS_THREADS 1
# elif defined(_POSIX_THREADS) && (_POSIX_THREADS + 0 >= 0)
# define BOOST_ASIO_HAS_THREADS 1
# elif defined(_PTHREADS)
@@ -1247,6 +1249,8 @@
# define BOOST_ASIO_HAS_PTHREADS 1
# elif defined(_POSIX_THREADS) && (_POSIX_THREADS + 0 >= 0)
# define BOOST_ASIO_HAS_PTHREADS 1
+# elif defined(__HAIKU__)
+# define BOOST_ASIO_HAS_PTHREADS 1
# endif // defined(BOOST_ASIO_HAS_BOOST_CONFIG) && defined(BOOST_HAS_PTHREADS)
# endif // defined(BOOST_ASIO_HAS_THREADS)
#endif // !defined(BOOST_ASIO_HAS_PTHREADS)
@@ -1427,11 +1431,11 @@
# endif // defined(BOOST_ASIO_MSVC)
# endif // !defined(BOOST_ASIO_DISABLE_CO_AWAIT)
# if defined(__clang__)
-# if (__cpp_coroutines >= 201703)
+# if (__cplusplus >= 201703) && (__cpp_coroutines >= 201703)
# if __has_include()
# define BOOST_ASIO_HAS_CO_AWAIT 1
# endif // __has_include()
-# endif // (__cpp_coroutines >= 201703)
+# endif // (__cplusplus >= 201703) && (__cpp_coroutines >= 201703)
# endif // defined(__clang__)
#endif // !defined(BOOST_ASIO_HAS_CO_AWAIT)
diff --git a/boost/asio/detail/impl/win_iocp_handle_service.ipp b/boost/asio/detail/impl/win_iocp_handle_service.ipp
index 1256c35..da33768 100644
--- a/boost/asio/detail/impl/win_iocp_handle_service.ipp
+++ b/boost/asio/detail/impl/win_iocp_handle_service.ipp
@@ -243,7 +243,8 @@ boost::system::error_code win_iocp_handle_service::cancel(
{
// The version of Windows supports cancellation from any thread.
typedef BOOL (WINAPI* cancel_io_ex_t)(HANDLE, LPOVERLAPPED);
- cancel_io_ex_t cancel_io_ex = (cancel_io_ex_t)cancel_io_ex_ptr;
+ cancel_io_ex_t cancel_io_ex = reinterpret_cast(
+ reinterpret_cast(cancel_io_ex_ptr));
if (!cancel_io_ex(impl.handle_, 0))
{
DWORD last_error = ::GetLastError();
diff --git a/boost/asio/detail/impl/win_iocp_serial_port_service.ipp b/boost/asio/detail/impl/win_iocp_serial_port_service.ipp
index 4e30b0f..a8133fa 100644
--- a/boost/asio/detail/impl/win_iocp_serial_port_service.ipp
+++ b/boost/asio/detail/impl/win_iocp_serial_port_service.ipp
@@ -80,11 +80,22 @@ boost::system::error_code win_iocp_serial_port_service::open(
}
// Set some default serial port parameters. This implementation does not
- // support changing these, so they might as well be in a known state.
+ // support changing all of these, so they might as well be in a known state.
dcb.fBinary = TRUE; // Win32 only supports binary mode.
- dcb.fDsrSensitivity = FALSE;
dcb.fNull = FALSE; // Do not ignore NULL characters.
dcb.fAbortOnError = FALSE; // Ignore serial framing errors.
+ dcb.BaudRate = 0; // 0 baud by default
+ dcb.ByteSize = 8; // 8 bit bytes
+ dcb.fOutxCtsFlow = FALSE; // No flow control
+ dcb.fOutxDsrFlow = FALSE;
+ dcb.fDtrControl = DTR_CONTROL_DISABLE;
+ dcb.fDsrSensitivity = FALSE;
+ dcb.fOutX = FALSE;
+ dcb.fInX = FALSE;
+ dcb.fRtsControl = DTR_CONTROL_DISABLE;
+ dcb.fParity = FALSE; // No parity
+ dcb.Parity = NOPARITY;
+ dcb.StopBits = ONESTOPBIT; // One stop bit
if (!::SetCommState(handle, &dcb))
{
DWORD last_error = ::GetLastError();
diff --git a/boost/asio/detail/impl/win_iocp_socket_service_base.ipp b/boost/asio/detail/impl/win_iocp_socket_service_base.ipp
index f95c74f..5691cdb 100644
--- a/boost/asio/detail/impl/win_iocp_socket_service_base.ipp
+++ b/boost/asio/detail/impl/win_iocp_socket_service_base.ipp
@@ -250,7 +250,8 @@ boost::system::error_code win_iocp_socket_service_base::cancel(
{
// The version of Windows supports cancellation from any thread.
typedef BOOL (WINAPI* cancel_io_ex_t)(HANDLE, LPOVERLAPPED);
- cancel_io_ex_t cancel_io_ex = (cancel_io_ex_t)cancel_io_ex_ptr;
+ cancel_io_ex_t cancel_io_ex = reinterpret_cast(
+ reinterpret_cast(cancel_io_ex_ptr));
socket_type sock = impl.socket_;
HANDLE sock_as_handle = reinterpret_cast(sock);
if (!cancel_io_ex(sock_as_handle, 0))
diff --git a/boost/asio/detail/io_object_executor.hpp b/boost/asio/detail/io_object_executor.hpp
index 70b026b..5b5258f 100644
--- a/boost/asio/detail/io_object_executor.hpp
+++ b/boost/asio/detail/io_object_executor.hpp
@@ -113,6 +113,13 @@ public:
// When using a native implementation, I/O completion handlers are
// already dispatched according to the execution context's executor's
// rules. We can call the function directly.
+#if defined(BOOST_ASIO_HAS_MOVE)
+ if (is_same::type>::value)
+ {
+ boost_asio_handler_invoke_helpers::invoke(f, f);
+ return;
+ }
+#endif // defined(BOOST_ASIO_HAS_MOVE)
typename decay::type function(BOOST_ASIO_MOVE_CAST(F)(f));
boost_asio_handler_invoke_helpers::invoke(function, function);
}
diff --git a/boost/asio/detail/is_buffer_sequence.hpp b/boost/asio/detail/is_buffer_sequence.hpp
index 89b8df7..c521032 100644
--- a/boost/asio/detail/is_buffer_sequence.hpp
+++ b/boost/asio/detail/is_buffer_sequence.hpp
@@ -54,19 +54,22 @@ struct buffer_sequence_memfns_check
{
};
-template
-char (&buffer_sequence_begin_helper(...))[2];
-
#if defined(BOOST_ASIO_HAS_DECLTYPE)
+template
+char buffer_sequence_begin_helper(...);
+
template
-char buffer_sequence_begin_helper(T* t,
+char (&buffer_sequence_begin_helper(T* t,
typename enable_if::value>::type*);
+ void>::value>::type*))[2];
#else // defined(BOOST_ASIO_HAS_DECLTYPE)
+template
+char (&buffer_sequence_begin_helper(...))[2];
+
template
char buffer_sequence_begin_helper(T* t,
buffer_sequence_memfns_check<
@@ -75,19 +78,22 @@ char buffer_sequence_begin_helper(T* t,
#endif // defined(BOOST_ASIO_HAS_DECLTYPE)
-template
-char (&buffer_sequence_end_helper(...))[2];
-
#if defined(BOOST_ASIO_HAS_DECLTYPE)
+template
+char buffer_sequence_end_helper(...);
+
template
-char buffer_sequence_end_helper(T* t,
+char (&buffer_sequence_end_helper(T* t,
typename enable_if::value>::type*);
+ void>::value>::type*))[2];
#else // defined(BOOST_ASIO_HAS_DECLTYPE)
+template
+char (&buffer_sequence_end_helper(...))[2];
+
template
char buffer_sequence_end_helper(T* t,
buffer_sequence_memfns_check<
@@ -215,8 +221,8 @@ char mutable_buffers_type_typedef_helper(
template
struct is_buffer_sequence_class
: integral_constant(0)) != 1 &&
- sizeof(buffer_sequence_end_helper(0)) != 1 &&
+ sizeof(buffer_sequence_begin_helper(0, 0)) != 1 &&
+ sizeof(buffer_sequence_end_helper(0, 0)) != 1 &&
sizeof(buffer_sequence_element_type_helper(0, 0)) == 1>
{
};
diff --git a/boost/asio/impl/connect.hpp b/boost/asio/impl/connect.hpp
index 51e5e6c..7089316 100644
--- a/boost/asio/impl/connect.hpp
+++ b/boost/asio/impl/connect.hpp
@@ -372,7 +372,7 @@ namespace detail
return;
}
- default:
+ /* fall-through */ default:
if (iter == end)
break;
@@ -542,7 +542,7 @@ namespace detail
return;
}
- default:
+ /* fall-through */ default:
if (iter_ == end_)
break;
diff --git a/boost/asio/version.hpp b/boost/asio/version.hpp
index 30d7b23..b93824d 100644
--- a/boost/asio/version.hpp
+++ b/boost/asio/version.hpp
@@ -18,6 +18,6 @@
// BOOST_ASIO_VERSION % 100 is the sub-minor version
// BOOST_ASIO_VERSION / 100 % 1000 is the minor version
// BOOST_ASIO_VERSION / 100000 is the major version
-#define BOOST_ASIO_VERSION 101400 // 1.14.0
+#define BOOST_ASIO_VERSION 101401 // 1.14.1
#endif // BOOST_ASIO_VERSION_HPP
diff --git a/boost/bind/bind.hpp b/boost/bind/bind.hpp
index 4cedc5e..711e000 100644
--- a/boost/bind/bind.hpp
+++ b/boost/bind/bind.hpp
@@ -2136,7 +2136,7 @@ template struct mf
#undef BOOST_MEM_FN_CC
#undef BOOST_MEM_FN_NAME
-#ifdef BOOST_MEM_FN_ENABLE_CDECL
+#if defined(BOOST_MEM_FN_ENABLE_CDECL) && !defined(_M_X64)
#define BOOST_MEM_FN_NAME(X) inner_##X##_cdecl
#define BOOST_MEM_FN_CC __cdecl
@@ -61,7 +61,7 @@ template struct mf
#endif
-#ifdef BOOST_MEM_FN_ENABLE_STDCALL
+#if defined(BOOST_MEM_FN_ENABLE_STDCALL) && !defined(_M_X64)
#define BOOST_MEM_FN_NAME(X) inner_##X##_stdcall
#define BOOST_MEM_FN_CC __stdcall
@@ -73,7 +73,7 @@ template struct mf
#endif
-#ifdef BOOST_MEM_FN_ENABLE_FASTCALL
+#if defined(BOOST_MEM_FN_ENABLE_FASTCALL) && !defined(_M_X64)
#define BOOST_MEM_FN_NAME(X) inner_##X##_fastcall
#define BOOST_MEM_FN_CC __fastcall
@@ -102,7 +102,7 @@ template<> struct mf
#undef BOOST_MEM_FN_CC
#undef BOOST_MEM_FN_NAME
-#ifdef BOOST_MEM_FN_ENABLE_CDECL
+#if defined(BOOST_MEM_FN_ENABLE_CDECL) && !defined(_M_X64)
#define BOOST_MEM_FN_NAME(X) inner_##X##_cdecl
#define BOOST_MEM_FN_CC __cdecl
@@ -155,7 +155,7 @@ template<> struct mf
#undef BOOST_MEM_FN_NAME2
#undef BOOST_MEM_FN_CC
-#ifdef BOOST_MEM_FN_ENABLE_CDECL
+#if defined(BOOST_MEM_FN_ENABLE_CDECL) && !defined(_M_X64)
#define BOOST_MEM_FN_NAME(X) X##_cdecl
#define BOOST_MEM_FN_NAME2(X) inner_##X##_cdecl
@@ -217,7 +217,7 @@ namespace _mfi
#undef BOOST_MEM_FN_CC
#undef BOOST_MEM_FN_NAME
-#ifdef BOOST_MEM_FN_ENABLE_CDECL
+#if defined(BOOST_MEM_FN_ENABLE_CDECL) && !defined(_M_X64)
#define BOOST_MEM_FN_NAME(X) X##_cdecl
#define BOOST_MEM_FN_CC __cdecl
@@ -229,7 +229,7 @@ namespace _mfi
#endif
-#ifdef BOOST_MEM_FN_ENABLE_STDCALL
+#if defined(BOOST_MEM_FN_ENABLE_STDCALL) && !defined(_M_X64)
#define BOOST_MEM_FN_NAME(X) X##_stdcall
#define BOOST_MEM_FN_CC __stdcall
@@ -241,7 +241,7 @@ namespace _mfi
#endif
-#ifdef BOOST_MEM_FN_ENABLE_FASTCALL
+#if defined(BOOST_MEM_FN_ENABLE_FASTCALL) && !defined(_M_X64)
#define BOOST_MEM_FN_NAME(X) X##_fastcall
#define BOOST_MEM_FN_CC __fastcall
@@ -270,7 +270,7 @@ namespace _mfi
#undef BOOST_MEM_FN_NAME
#undef BOOST_MEM_FN_CC
-#ifdef BOOST_MEM_FN_ENABLE_CDECL
+#if defined(BOOST_MEM_FN_ENABLE_CDECL) && !defined(_M_X64)
#define BOOST_MEM_FN_NAME(X) X##_cdecl
#define BOOST_MEM_FN_CC __cdecl
@@ -282,7 +282,7 @@ namespace _mfi
#endif
-#ifdef BOOST_MEM_FN_ENABLE_STDCALL
+#if defined(BOOST_MEM_FN_ENABLE_STDCALL) && !defined(_M_X64)
#define BOOST_MEM_FN_NAME(X) X##_stdcall
#define BOOST_MEM_FN_CC __stdcall
@@ -294,7 +294,7 @@ namespace _mfi
#endif
-#ifdef BOOST_MEM_FN_ENABLE_FASTCALL
+#if defined(BOOST_MEM_FN_ENABLE_FASTCALL) && !defined(_M_X64)
#define BOOST_MEM_FN_NAME(X) X##_fastcall
#define BOOST_MEM_FN_CC __fastcall
diff --git a/boost/config/auto_link.hpp b/boost/config/auto_link.hpp
index d0079d9..e74f3c1 100644
--- a/boost/config/auto_link.hpp
+++ b/boost/config/auto_link.hpp
@@ -99,7 +99,8 @@ BOOST_LIB_VERSION: The Boost version, in the form x_y, for Boost version x.y.
#if defined(BOOST_MSVC) \
|| defined(__BORLANDC__) \
|| (defined(__MWERKS__) && defined(_WIN32) && (__MWERKS__ >= 0x3000)) \
- || (defined(__ICL) && defined(_MSC_EXTENSIONS) && (_MSC_VER >= 1200))
+ || (defined(__ICL) && defined(_MSC_EXTENSIONS) && (_MSC_VER >= 1200)) \
+ || (defined(BOOST_CLANG) && defined(BOOST_WINDOWS) && defined(_MSC_VER) && (__clang_major__ >= 4))
#ifndef BOOST_VERSION_HPP
# include
@@ -203,6 +204,11 @@ BOOST_LIB_VERSION: The Boost version, in the form x_y, for Boost version x.y.
// Metrowerks CodeWarrior 9.x
# define BOOST_LIB_TOOLSET "cw9"
+# elif defined(BOOST_CLANG) && defined(BOOST_WINDOWS) && defined(_MSC_VER) && (__clang_major__ >= 4)
+
+ // Clang on Windows
+# define BOOST_LIB_TOOLSET "clangw" BOOST_STRINGIZE(__clang_major__)
+
# endif
#endif // BOOST_LIB_TOOLSET
diff --git a/boost/config/compiler/gcc.hpp b/boost/config/compiler/gcc.hpp
index 9ae6072..3380ffe 100644
--- a/boost/config/compiler/gcc.hpp
+++ b/boost/config/compiler/gcc.hpp
@@ -309,8 +309,8 @@
# define BOOST_FALLTHROUGH __attribute__((fallthrough))
#endif
-#ifdef __MINGW32__
-// Currently (June 2017) thread_local is broken on mingw for all current compiler releases, see
+#if defined(__MINGW32__) && !defined(__MINGW64__)
+// Currently (March 2019) thread_local is broken on mingw for all current 32bit compiler releases, see
// https://sourceforge.net/p/mingw-w64/bugs/527/
// Not setting this causes program termination on thread exit.
#define BOOST_NO_CXX11_THREAD_LOCAL
@@ -327,7 +327,7 @@
//
// __builtin_unreachable:
-#if BOOST_GCC_VERSION >= 40800
+#if BOOST_GCC_VERSION >= 40500
#define BOOST_UNREACHABLE_RETURN(x) __builtin_unreachable();
#endif
diff --git a/boost/config/compiler/visualc.hpp b/boost/config/compiler/visualc.hpp
index 2964247..e2ea270 100644
--- a/boost/config/compiler/visualc.hpp
+++ b/boost/config/compiler/visualc.hpp
@@ -43,6 +43,9 @@
# error "Compiler not supported or configured - please reconfigure"
#endif
+// VS2005 (VC8) docs: __assume has been in Visual C++ for multiple releases
+#define BOOST_UNREACHABLE_RETURN(x) __assume(0);
+
#if _MSC_FULL_VER < 180020827
# define BOOST_NO_FENV_H
#endif
@@ -202,8 +205,9 @@
#if (_MSC_VER < 1911) || (_MSVC_LANG < 201703)
# define BOOST_NO_CXX17_STRUCTURED_BINDINGS
# define BOOST_NO_CXX17_IF_CONSTEXPR
-# define BOOST_NO_CXX17_HDR_OPTIONAL
-# define BOOST_NO_CXX17_HDR_STRING_VIEW
+// Let the defaults handle these now:
+//# define BOOST_NO_CXX17_HDR_OPTIONAL
+//# define BOOST_NO_CXX17_HDR_STRING_VIEW
#endif
// MSVC including version 14 has not yet completely
@@ -313,7 +317,7 @@
# endif
# else
# if _MSC_VER < 1200
- // Note: Versions up to 7.0 aren't supported.
+ // Note: Versions up to 10.0 aren't supported.
# define BOOST_COMPILER_VERSION 5.0
# elif _MSC_VER < 1300
# define BOOST_COMPILER_VERSION 6.0
@@ -335,6 +339,8 @@
# define BOOST_COMPILER_VERSION 14.0
# elif _MSC_VER < 1920
# define BOOST_COMPILER_VERSION 14.1
+# elif _MSC_VER < 1930
+# define BOOST_COMPILER_VERSION 14.2
# else
# define BOOST_COMPILER_VERSION _MSC_VER
# endif
@@ -346,8 +352,8 @@
#include
//
-// last known and checked version is 19.12.25830.2 (VC++ 2017.3):
-#if (_MSC_VER > 1912)
+// last known and checked version is 19.20.27508 (VC++ 2019 RC3):
+#if (_MSC_VER > 1920)
# if defined(BOOST_ASSERT_CONFIG)
# error "Boost.Config is older than your current compiler version."
# elif !defined(BOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE)
diff --git a/boost/config/detail/suffix.hpp b/boost/config/detail/suffix.hpp
index cee9647..86f6081 100644
--- a/boost/config/detail/suffix.hpp
+++ b/boost/config/detail/suffix.hpp
@@ -992,6 +992,23 @@ namespace std{ using ::type_info; }
#ifndef BOOST_ATTRIBUTE_UNUSED
# define BOOST_ATTRIBUTE_UNUSED
#endif
+//
+// [[nodiscard]]:
+//
+#ifdef __has_cpp_attribute
+#if __has_cpp_attribute(nodiscard)
+# define BOOST_ATTRIBUTE_NODISCARD [[nodiscard]]
+#endif
+#if __has_cpp_attribute(no_unique_address) && !(defined(__GNUC__) && (__cplusplus < 201100))
+# define BOOST_ATTRIBUTE_NO_UNIQUE_ADDRESS [[no_unique_address]]
+#endif
+#endif
+#ifndef BOOST_ATTRIBUTE_NODISCARD
+# define BOOST_ATTRIBUTE_NODISCARD
+#endif
+#ifndef BOOST_ATTRIBUTE_NO_UNIQUE_ADDRESS
+# define BOOST_ATTRIBUTE_NO_UNIQUE_ADDRESS
+#endif
#define BOOST_STATIC_CONSTEXPR static BOOST_CONSTEXPR_OR_CONST
@@ -1027,6 +1044,7 @@ namespace std{ using ::type_info; }
#if !defined(__has_include)
# define BOOST_NO_CXX17_HDR_OPTIONAL
# define BOOST_NO_CXX17_HDR_STRING_VIEW
+# define BOOST_NO_CXX17_HDR_VARIANT
#else
#if !__has_include()
# define BOOST_NO_CXX17_HDR_OPTIONAL
@@ -1034,6 +1052,9 @@ namespace std{ using ::type_info; }
#if !__has_include()
# define BOOST_NO_CXX17_HDR_STRING_VIEW
#endif
+#if !__has_include()
+# define BOOST_NO_CXX17_HDR_VARIANT
+#endif
#endif
//
diff --git a/boost/config/platform/vxworks.hpp b/boost/config/platform/vxworks.hpp
index a91e4ab..7718acb 100644
--- a/boost/config/platform/vxworks.hpp
+++ b/boost/config/platform/vxworks.hpp
@@ -12,40 +12,17 @@
// like (GCC 2.96) . Do not even think of getting this to work,
// a miserable failure will be guaranteed!
//
-// Equally, this file has been tested for RTPs (Real Time Processes)
-// only, not for DKMs (Downloadable Kernel Modules). These two types
-// of executables differ largely in the available functionality of
-// the C-library, STL, and so on. A DKM uses a C89 library with no
-// wide character support and no guarantee of ANSI C. The same Dinkum
+// VxWorks supports C++ linkage in the kernel with
+// DKMs (Downloadable Kernel Modules). But, until recently
+// the kernel used a C89 library with no
+// wide character support and no guarantee of ANSI C.
+// Regardless of the C library the same Dinkum
// STL library is used in both contexts.
//
// Similarly the Dinkum abridged STL that supports the loosely specified
// embedded C++ standard has not been tested and is unlikely to work
// on anything but the simplest library.
// ====================================================================
-//
-// Additional Configuration
-// -------------------------------------------------------------------
-//
-// Because of the ordering of include files and other issues the following
-// additional definitions worked better outside this file.
-//
-// When building the log library add the following to the b2 invocation
-// define=BOOST_LOG_WITHOUT_IPC
-// and
-// -DBOOST_LOG_WITHOUT_DEFAULT_FACTORIES
-// to your compile options.
-//
-// When building the test library add
-// -DBOOST_TEST_LIMITED_SIGNAL_DETAILS
-// to your compile options
-//
-// When building containers library add
-// -DHAVE_MORECORE=0
-// to your c compile options so dlmalloc heap library is compiled
-// without brk() calls
-//
-// ====================================================================
//
// Some important information regarding the usage of POSIX semaphores:
// -------------------------------------------------------------------
@@ -112,30 +89,20 @@
// --------------------------------
#define BOOST_PLATFORM "vxWorks"
-// Special behaviour for DKMs:
-#ifdef _WRS_KERNEL
- // DKMs do not have the -header,
- // but apparently they do have an intrinsic wchar_t meanwhile!
-# define BOOST_NO_CWCHAR
-
- // Lots of wide-functions and -headers are unavailable for DKMs as well:
-# define BOOST_NO_CWCTYPE
-# define BOOST_NO_SWPRINTF
-# define BOOST_NO_STD_WSTRING
-# define BOOST_NO_STD_WSTREAMBUF
-#endif
// Generally available headers:
#define BOOST_HAS_UNISTD_H
#define BOOST_HAS_STDINT_H
#define BOOST_HAS_DIRENT_H
-#define BOOST_HAS_SLIST
+//#define BOOST_HAS_SLIST
// vxWorks does not have installed an iconv-library by default,
// so unfortunately no Unicode support from scratch is available!
// Thus, instead it is suggested to switch to ICU, as this seems
// to be the most complete and portable option...
-#define BOOST_LOCALE_WITH_ICU
+#ifndef BOOST_LOCALE_WITH_ICU
+ #define BOOST_LOCALE_WITH_ICU
+#endif
// Generally available functionality:
#define BOOST_HAS_THREADS
@@ -170,16 +137,18 @@
# ifndef _POSIX_THREADS
# define _POSIX_THREADS 1
# endif
+// no sysconf( _SC_PAGESIZE) in kernel
+# define BOOST_THREAD_USES_GETPAGESIZE
#endif
#if (_WRS_VXWORKS_MAJOR < 7)
// vxWorks-around: #defines CLOCKS_PER_SEC as sysClkRateGet() but
// miserably fails to #include the required to make
// sysClkRateGet() available! So we manually include it here.
-#ifdef __RTP__
-# include
-# include
-#endif
+# ifdef __RTP__
+# include
+# include
+# endif
// vxWorks-around: In the macros INT32_C(), UINT32_C(), INT64_C() and
// UINT64_C() are defined erroneously, yielding not a signed/
@@ -188,30 +157,47 @@
// when trying to define several constants which do not fit into a
// long type! We correct them here by redefining.
-#include
+# include
+
+// Special behaviour for DKMs:
// Some macro-magic to do the job
-#define VX_JOIN(X, Y) VX_DO_JOIN(X, Y)
-#define VX_DO_JOIN(X, Y) VX_DO_JOIN2(X, Y)
-#define VX_DO_JOIN2(X, Y) X##Y
+# define VX_JOIN(X, Y) VX_DO_JOIN(X, Y)
+# define VX_DO_JOIN(X, Y) VX_DO_JOIN2(X, Y)
+# define VX_DO_JOIN2(X, Y) X##Y
// Correctly setup the macros
-#undef INT32_C
-#undef UINT32_C
-#undef INT64_C
-#undef UINT64_C
-#define INT32_C(x) VX_JOIN(x, L)
-#define UINT32_C(x) VX_JOIN(x, UL)
-#define INT64_C(x) VX_JOIN(x, LL)
-#define UINT64_C(x) VX_JOIN(x, ULL)
+# undef INT32_C
+# undef UINT32_C
+# undef INT64_C
+# undef UINT64_C
+# define INT32_C(x) VX_JOIN(x, L)
+# define UINT32_C(x) VX_JOIN(x, UL)
+# define INT64_C(x) VX_JOIN(x, LL)
+# define UINT64_C(x) VX_JOIN(x, ULL)
// #include Libraries required for the following function adaption
-#include
+# include
#endif // _WRS_VXWORKS_MAJOR < 7
#include
#include
+#if defined(_WRS_KERNEL) && (_CPPLIB_VER < 700)
+ // recent kernels use Dinkum clib v7.00+
+ // with widechar but older kernels
+ // do not have the -header,
+ // but apparently they do have an intrinsic wchar_t meanwhile!
+# define BOOST_NO_CWCHAR
+
+ // Lots of wide-functions and -headers are unavailable for DKMs as well:
+# define BOOST_NO_CWCTYPE
+# define BOOST_NO_SWPRINTF
+# define BOOST_NO_STD_WSTRING
+# define BOOST_NO_STD_WSTREAMBUF
+#endif
+
+
// Use C-linkage for the following helper functions
#ifdef __cplusplus
extern "C" {
@@ -253,9 +239,9 @@ inline int truncate(const char *p, off_t l){
}
#ifdef __GNUC__
-#define ___unused __attribute__((unused))
+# define ___unused __attribute__((unused))
#else
-#define ___unused
+# define ___unused
#endif
// Fake symlink handling by dummy functions:
@@ -291,7 +277,7 @@ inline int gettimeofday(struct timeval *tv, void * /*tzv*/) {
* to avoid conflict with MPL operator times
*/
#if (_WRS_VXWORKS_MAJOR < 7)
-#ifdef __cplusplus
+# ifdef __cplusplus
// vxWorks provides neither struct tms nor function times()!
// We implement an empty dummy-function, simply setting the user
@@ -327,7 +313,7 @@ struct tms{
namespace std {
using ::times;
}
-#endif // __cplusplus
+# endif // __cplusplus
#endif // _WRS_VXWORKS_MAJOR < 7
@@ -336,16 +322,16 @@ extern "C" void bzero (void *, size_t); // FD_ZERO uses bzero() but does
// Put the selfmade functions into the std-namespace, just in case
namespace std {
-# ifdef __RTP__
+# ifdef __RTP__
using ::getrlimit;
using ::setrlimit;
-# endif
+# endif
using ::truncate;
using ::symlink;
using ::readlink;
-#if (_WRS_VXWORKS_MAJOR < 7)
+# if (_WRS_VXWORKS_MAJOR < 7)
using ::gettimeofday;
-#endif
+# endif
}
#endif // __cplusplus
@@ -355,10 +341,12 @@ namespace std {
// Include signal.h which might contain a typo to be corrected here
#include
+
#if (_WRS_VXWORKS_MAJOR < 7)
-#define getpagesize() sysconf(_SC_PAGESIZE) // getpagesize is deprecated anyway!
+# define getpagesize() sysconf(_SC_PAGESIZE) // getpagesize is deprecated anyway!
inline int lstat(p, b) { return stat(p, b); } // lstat() == stat(), as vxWorks has no symlinks!
#endif
+
#ifndef S_ISSOCK
# define S_ISSOCK(mode) ((mode & S_IFMT) == S_IFSOCK) // Is file a socket?
#endif
@@ -379,7 +367,7 @@ typedef int locale_t; // locale_t is a POSIX-ex
// vxWorks 7 adds C++11 support
// however it is optional, and does not match exactly the support determined
// by examining the Dinkum STL version and GCC version (or ICC and DCC)
-#ifndef _WRS_CONFIG_LANG_LIB_CPLUS_CPLUS_USER_2011
+#if !( defined( _WRS_CONFIG_LANG_LIB_CPLUS_CPLUS_USER_2011) || defined(_WRS_CONFIG_LIBCPLUS_STD))
# define BOOST_NO_CXX11_ADDRESSOF // C11 addressof operator on memory location
# define BOOST_NO_CXX11_ALLOCATOR
# define BOOST_NO_CXX11_ATOMIC_SMART_PTR
@@ -408,9 +396,9 @@ typedef int locale_t; // locale_t is a POSIX-ex
# define BOOST_NO_CXX11_HDR_UNORDERED_MAP
# define BOOST_NO_CXX11_HDR_UNORDERED_SET
#else
-#ifndef BOOST_SYSTEM_NO_DEPRECATED
-# define BOOST_SYSTEM_NO_DEPRECATED // workaround link error in spirit
-#endif
+# ifndef BOOST_SYSTEM_NO_DEPRECATED
+# define BOOST_SYSTEM_NO_DEPRECATED // workaround link error in spirit
+# endif
#endif
@@ -418,6 +406,8 @@ typedef int locale_t; // locale_t is a POSIX-ex
#undef NONE
// restrict is an iostreams class
#undef restrict
+// affects some typeof tests
+#undef V7
// use fake poll() from Unix layer in ASIO to get full functionality
// most libraries will use select() but this define allows 'iostream' functionality
@@ -430,4 +420,3 @@ typedef int locale_t; // locale_t is a POSIX-ex
# define BOOST_ASIO_DISABLE_SERIAL_PORT
#endif
-
diff --git a/boost/config/stdlib/dinkumware.hpp b/boost/config/stdlib/dinkumware.hpp
index e829f08..19c772c 100644
--- a/boost/config/stdlib/dinkumware.hpp
+++ b/boost/config/stdlib/dinkumware.hpp
@@ -174,6 +174,9 @@
#if !defined(_CPPLIB_VER) || (_CPPLIB_VER < 650) || !defined(BOOST_MSVC) || (BOOST_MSVC < 1910) || !defined(_HAS_CXX17) || (_HAS_CXX17 == 0)
# define BOOST_NO_CXX17_STD_APPLY
# define BOOST_NO_CXX17_ITERATOR_TRAITS
+# define BOOST_NO_CXX17_HDR_STRING_VIEW
+# define BOOST_NO_CXX17_HDR_OPTIONAL
+# define BOOST_NO_CXX17_HDR_VARIANT
#endif
#if !defined(_CPPLIB_VER) || (_CPPLIB_VER < 650) || !defined(_HAS_CXX17) || (_HAS_CXX17 == 0) || !defined(_MSVC_STL_UPDATE) || (_MSVC_STL_UPDATE < 201709)
# define BOOST_NO_CXX17_STD_INVOKE
diff --git a/boost/config/stdlib/libcpp.hpp b/boost/config/stdlib/libcpp.hpp
index ffe2f2a..e5e5c34 100644
--- a/boost/config/stdlib/libcpp.hpp
+++ b/boost/config/stdlib/libcpp.hpp
@@ -91,6 +91,7 @@
# define BOOST_NO_CXX17_STD_APPLY
# define BOOST_NO_CXX17_HDR_OPTIONAL
# define BOOST_NO_CXX17_HDR_STRING_VIEW
+# define BOOST_NO_CXX17_HDR_VARIANT
#endif
#if (_LIBCPP_VERSION > 4000) && (__cplusplus > 201402L) && !defined(_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR)
# define BOOST_NO_AUTO_PTR
diff --git a/boost/config/stdlib/libstdcpp3.hpp b/boost/config/stdlib/libstdcpp3.hpp
index 38209dd..9696515 100644
--- a/boost/config/stdlib/libstdcpp3.hpp
+++ b/boost/config/stdlib/libstdcpp3.hpp
@@ -301,6 +301,7 @@ extern "C" char *gets (char *__s);
# define BOOST_NO_CXX17_STD_APPLY
# define BOOST_NO_CXX17_HDR_OPTIONAL
# define BOOST_NO_CXX17_HDR_STRING_VIEW
+# define BOOST_NO_CXX17_HDR_VARIANT
#endif
#if defined(__has_include)
diff --git a/boost/container/allocator_traits.hpp b/boost/container/allocator_traits.hpp
index 8cfb037..72d90d1 100644
--- a/boost/container/allocator_traits.hpp
+++ b/boost/container/allocator_traits.hpp
@@ -77,7 +77,7 @@ namespace container {
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
-template
+template
class small_vector_allocator;
namespace allocator_traits_detail {
@@ -99,8 +99,8 @@ template
struct is_std_allocator< std::allocator >
{ static const bool value = true; };
-template
-struct is_std_allocator< small_vector_allocator > >
+template
+struct is_std_allocator< small_vector_allocator, Options > >
{ static const bool value = true; };
template
diff --git a/boost/container/container_fwd.hpp b/boost/container/container_fwd.hpp
index b7591cd..2cfb20a 100644
--- a/boost/container/container_fwd.hpp
+++ b/boost/container/container_fwd.hpp
@@ -24,6 +24,7 @@
//! - boost::container::vector
//! - boost::container::stable_vector
//! - boost::container::static_vector
+//! - boost::container::small_vector_base
//! - boost::container::small_vector
//! - boost::container::slist
//! - boost::container::list
@@ -105,15 +106,25 @@ template
class stable_vector;
-template
+template < class T
+ , std::size_t Capacity
+ , class Options = void>
class static_vector;
-template < class T, std::size_t N
- , class Allocator = void >
+template < class T
+ , class Allocator = void
+ , class Options = void >
+class small_vector_base;
+
+template < class T
+ , std::size_t N
+ , class Allocator = void
+ , class Options = void >
class small_vector;
template
+ ,class Allocator = void
+ ,class Options = void>
class deque;
template ::value>::type v;
+ typename dtl::aligned_storage::value>::type v;
value_type *vp = reinterpret_cast(v.data);
alloc_traits::construct(a, vp);
value_destructor on_exit(a, *vp); (void)on_exit;
@@ -151,7 +151,7 @@ struct insert_default_initialized_n_proxy
{
if(!is_pod::value){
for (; 0 < n; --n, ++p){
- typename aligned_storage::value>::type v;
+ typename dtl::aligned_storage::value>::type v;
value_type *vp = reinterpret_cast(v.data);
alloc_traits::construct(a, vp, default_init);
value_destructor on_exit(a, *vp); (void)on_exit;
@@ -195,17 +195,17 @@ struct insert_move_proxy
typedef typename alloc_traits::size_type size_type;
typedef typename alloc_traits::value_type value_type;
- explicit insert_move_proxy(value_type &v)
+ BOOST_CONTAINER_FORCEINLINE explicit insert_move_proxy(value_type &v)
: v_(v)
{}
- void uninitialized_copy_n_and_update(Allocator &a, Iterator p, size_type n) const
+ BOOST_CONTAINER_FORCEINLINE void uninitialized_copy_n_and_update(Allocator &a, Iterator p, size_type n) const
{
BOOST_ASSERT(n == 1); (void)n;
alloc_traits::construct( a, boost::movelib::iterator_to_raw_pointer(p), ::boost::move(v_) );
}
- void copy_n_and_update(Allocator &, Iterator p, size_type n) const
+ BOOST_CONTAINER_FORCEINLINE void copy_n_and_update(Allocator &, Iterator p, size_type n) const
{
BOOST_ASSERT(n == 1); (void)n;
*p = ::boost::move(v_);
@@ -288,7 +288,7 @@ struct insert_emplace_proxy
void priv_copy_some_and_update(Allocator &a, const index_tuple&, Iterator p, size_type n)
{
BOOST_ASSERT(n ==1); (void)n;
- typename aligned_storage::value>::type v;
+ typename dtl::aligned_storage::value>::type v;
value_type *vp = reinterpret_cast(v.data);
alloc_traits::construct(a, vp,
::boost::forward(get(this->args_))...);
@@ -398,7 +398,7 @@ struct insert_emplace_proxy_arg##N\
void copy_n_and_update(Allocator &a, Iterator p, size_type n)\
{\
BOOST_ASSERT(n == 1); (void)n;\
- typename aligned_storage::value>::type v;\
+ typename dtl::aligned_storage::value>::type v;\
BOOST_ASSERT((((size_type)(&v)) % alignment_of::value) == 0);\
value_type *vp = reinterpret_cast(v.data);\
alloc_traits::construct(a, vp BOOST_MOVE_I##N BOOST_MOVE_MFWD##N);\
diff --git a/boost/container/detail/container_rebind.hpp b/boost/container/detail/container_rebind.hpp
index 0ebb478..0af9b9e 100644
--- a/boost/container/detail/container_rebind.hpp
+++ b/boost/container/detail/container_rebind.hpp
@@ -19,6 +19,7 @@
#endif
#include
+#include
namespace boost {
@@ -33,14 +34,14 @@ namespace dtl {
template class Cont, typename V, typename A, class... An, class U>
struct container_rebind, U>
{
- typedef Cont::template portable_rebind_alloc::type, An...> type;
+ typedef Cont::type>::template portable_rebind_alloc::type, An...> type;
};
//Needed for non-conforming compilers like GCC 4.3
template class Cont, typename V, typename A, class U>
struct container_rebind, U>
{
- typedef Cont::template portable_rebind_alloc::type> type;
+ typedef Cont::type>::template portable_rebind_alloc::type> type;
};
template class Cont, typename V, class U>
@@ -49,27 +50,6 @@ namespace dtl {
typedef Cont type;
};
- //for small_vector,static_vector
-
- template class Cont, typename V, std::size_t N, typename A, class... An, class U>
- struct container_rebind, U>
- {
- typedef Cont::template portable_rebind_alloc::type, An...> type;
- };
-
- //Needed for non-conforming compilers like GCC 4.3
- template class Cont, typename V, std::size_t N, typename A, class U>
- struct container_rebind, U>
- {
- typedef Cont::template portable_rebind_alloc::type> type;
- };
-
- template class Cont, typename V, std::size_t N, class U>
- struct container_rebind, U>
- {
- typedef Cont type;
- };
-
#else //C++03 compilers
template class Cont //0arg
@@ -85,7 +65,7 @@ namespace dtl {
, class U>
struct container_rebind, U>
{
- typedef Cont::template portable_rebind_alloc::type> type;
+ typedef Cont::type>::template portable_rebind_alloc::type> type;
};
template class Cont //1arg
@@ -93,7 +73,7 @@ namespace dtl {
, class U>
struct container_rebind, U>
{
- typedef Cont::template portable_rebind_alloc::type, P0> type;
+ typedef Cont::type>::template portable_rebind_alloc::type, P0> type;
};
template class Cont //2arg
@@ -101,7 +81,7 @@ namespace dtl {
, class U>
struct container_rebind, U>
{
- typedef Cont::template portable_rebind_alloc::type, P0, P1> type;
+ typedef Cont::type>::template portable_rebind_alloc::type, P0, P1> type;
};
template class Cont //3arg
@@ -109,7 +89,7 @@ namespace dtl {
, class U>
struct container_rebind, U>
{
- typedef Cont::template portable_rebind_alloc::type, P0, P1, P2> type;
+ typedef Cont::type>::template portable_rebind_alloc::type, P0, P1, P2> type;
};
template class Cont //4arg
@@ -117,7 +97,7 @@ namespace dtl {
, class U>
struct container_rebind, U>
{
- typedef Cont::template portable_rebind_alloc::type, P0, P1, P2, P3> type;
+ typedef Cont::type>::template portable_rebind_alloc::type, P0, P1, P2, P3> type;
};
template class Cont //5arg
@@ -125,7 +105,7 @@ namespace dtl {
, class U>
struct container_rebind, U>
{
- typedef Cont::template portable_rebind_alloc::type, P0, P1, P2, P3, P4> type;
+ typedef Cont::type>::template portable_rebind_alloc::type, P0, P1, P2, P3, P4> type;
};
template class Cont //6arg
@@ -133,7 +113,7 @@ namespace dtl {
, class U>
struct container_rebind, U>
{
- typedef Cont::template portable_rebind_alloc::type, P0, P1, P2, P3, P4, P5> type;
+ typedef Cont::type>::template portable_rebind_alloc::type, P0, P1, P2, P3, P4, P5> type;
};
template class Cont //7arg
@@ -141,7 +121,7 @@ namespace dtl {
, class U>
struct container_rebind, U>
{
- typedef Cont::template portable_rebind_alloc::type, P0, P1, P2, P3, P4, P5, P6> type;
+ typedef Cont::type>::template portable_rebind_alloc::type, P0, P1, P2, P3, P4, P5, P6> type;
};
template class Cont //8arg
@@ -149,7 +129,7 @@ namespace dtl {
, class U>
struct container_rebind, U>
{
- typedef Cont::template portable_rebind_alloc::type, P0, P1, P2, P3, P4, P5, P6, P7> type;
+ typedef Cont::type>::template portable_rebind_alloc::type, P0, P1, P2, P3, P4, P5, P6, P7> type;
};
template class Cont //9arg
@@ -157,100 +137,25 @@ namespace dtl {
, class U>
struct container_rebind, U>
{
- typedef Cont::template portable_rebind_alloc::type, P0, P1, P2, P3, P4, P5, P6, P7, P8> type;
- };
-
- //For small_vector/static_vector
- template class Cont //0arg
- , typename V, std::size_t N
- , class U>
- struct container_rebind, U>
- {
- typedef Cont type;
- };
-
- template class Cont //0arg
- , typename V, std::size_t N, typename A
- , class U>
- struct container_rebind, U>
- {
- typedef Cont::template portable_rebind_alloc::type> type;
- };
-
- template class Cont //1arg
- , typename V, std::size_t N, typename A, class P0
- , class U>
- struct container_rebind, U>
- {
- typedef Cont::template portable_rebind_alloc::type, P0> type;
- };
-
- template class Cont //2arg
- , typename V, std::size_t N, typename A, class P0, class P1
- , class U>
- struct container_rebind, U>
- {
- typedef Cont::template portable_rebind_alloc::type, P0, P1> type;
- };
-
- template class Cont //3arg
- , typename V, std::size_t N, typename A, class P0, class P1, class P2
- , class U>
- struct container_rebind, U>
- {
- typedef Cont::template portable_rebind_alloc::type, P0, P1, P2> type;
- };
-
- template class Cont //4arg
- , typename V, std::size_t N, typename A, class P0, class P1, class P2, class P3
- , class U>
- struct container_rebind, U>
- {
- typedef Cont::template portable_rebind_alloc::type, P0, P1, P2, P3> type;
- };
-
- template