From e93db8e7fa7bbdf0103bfbca74759ab4d6eccdee Mon Sep 17 00:00:00 2001 From: Christopher Kohlhoff Date: Tue, 4 Apr 2023 20:15:01 +1000 Subject: [PATCH] Prevent buffer types from matching contiguous iterator overloads. Fixes a bug where passing the deprecated const_buffers_1 and mutable_buffers_1 types to asio::buffer() would result in the contiguous iterator overloads being incorrectly chosen. --- include/boost/asio/buffer.hpp | 48 +++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/include/boost/asio/buffer.hpp b/include/boost/asio/buffer.hpp index c620ccc8..105ce028 100644 --- a/include/boost/asio/buffer.hpp +++ b/include/boost/asio/buffer.hpp @@ -1568,6 +1568,14 @@ BOOST_ASIO_NODISCARD inline BOOST_ASIO_MUTABLE_BUFFER buffer( is_contiguous_iterator::value, defaulted_constraint >::type = defaulted_constraint(), + typename constraint< + !is_convertible::value, + defaulted_constraint + >::type = defaulted_constraint(), + typename constraint< + !is_convertible::value, + defaulted_constraint + >::type = defaulted_constraint(), typename constraint< !is_const< typename remove_reference< @@ -1598,6 +1606,14 @@ BOOST_ASIO_NODISCARD inline BOOST_ASIO_MUTABLE_BUFFER buffer( is_contiguous_iterator::value, defaulted_constraint >::type = defaulted_constraint(), + typename constraint< + !is_convertible::value, + defaulted_constraint + >::type = defaulted_constraint(), + typename constraint< + !is_convertible::value, + defaulted_constraint + >::type = defaulted_constraint(), typename constraint< !is_const< typename remove_reference< @@ -1627,6 +1643,14 @@ BOOST_ASIO_NODISCARD inline BOOST_ASIO_CONST_BUFFER buffer( is_contiguous_iterator::value, defaulted_constraint >::type = defaulted_constraint(), + typename constraint< + !is_convertible::value, + defaulted_constraint + >::type = defaulted_constraint(), + typename constraint< + !is_convertible::value, + defaulted_constraint + >::type = defaulted_constraint(), typename constraint< is_const< typename remove_reference< @@ -1657,6 +1681,14 @@ BOOST_ASIO_NODISCARD inline BOOST_ASIO_CONST_BUFFER buffer( is_contiguous_iterator::value, defaulted_constraint >::type = defaulted_constraint(), + typename constraint< + !is_convertible::value, + defaulted_constraint + >::type = defaulted_constraint(), + typename constraint< + !is_convertible::value, + defaulted_constraint + >::type = defaulted_constraint(), typename constraint< is_const< typename remove_reference< @@ -1685,6 +1717,14 @@ BOOST_ASIO_NODISCARD inline BOOST_ASIO_CONST_BUFFER buffer( typename constraint< is_contiguous_iterator::value, defaulted_constraint + >::type = defaulted_constraint(), + typename constraint< + !is_convertible::value, + defaulted_constraint + >::type = defaulted_constraint(), + typename constraint< + !is_convertible::value, + defaulted_constraint >::type = defaulted_constraint()) BOOST_ASIO_NOEXCEPT { return BOOST_ASIO_CONST_BUFFER( @@ -1707,6 +1747,14 @@ BOOST_ASIO_NODISCARD inline BOOST_ASIO_CONST_BUFFER buffer( typename constraint< is_contiguous_iterator::value, defaulted_constraint + >::type = defaulted_constraint(), + typename constraint< + !is_convertible::value, + defaulted_constraint + >::type = defaulted_constraint(), + typename constraint< + !is_convertible::value, + defaulted_constraint >::type = defaulted_constraint()) BOOST_ASIO_NOEXCEPT { return BOOST_ASIO_CONST_BUFFER(