From 1a80896934581d3af85c87d146ca89a776c0ca3a Mon Sep 17 00:00:00 2001 From: Andrey Semashev Date: Fri, 1 Jul 2022 00:13:32 +0300 Subject: [PATCH] Disabled assignment of output_proxy to output_proxy. --- .../iterator/function_output_iterator.hpp | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/include/boost/iterator/function_output_iterator.hpp b/include/boost/iterator/function_output_iterator.hpp index 2708bbd..72a864d 100644 --- a/include/boost/iterator/function_output_iterator.hpp +++ b/include/boost/iterator/function_output_iterator.hpp @@ -13,6 +13,10 @@ #include #include +#include +#include +#include +#include namespace boost { namespace iterators { @@ -24,20 +28,31 @@ namespace iterators { class output_proxy { public: - explicit output_proxy(UnaryFunction& f) : m_f(f) { } + explicit output_proxy(UnaryFunction& f) BOOST_NOEXCEPT : m_f(f) { } #ifdef BOOST_NO_CXX11_RVALUE_REFERENCES - template output_proxy& operator=(const T& value) { + template + typename boost::disable_if_c< + boost::is_same< typename boost::remove_cv< T >::type, output_proxy >::value, + output_proxy& + >::type operator=(const T& value) { m_f(value); return *this; } #else - template output_proxy& operator=(T&& value) { + template + typename boost::disable_if_c< + boost::is_same< typename boost::remove_cv< typename boost::remove_reference< T >::type >::type, output_proxy >::value, + output_proxy& + >::type operator=(T&& value) { m_f(static_cast< T&& >(value)); return *this; } #endif + BOOST_DEFAULTED_FUNCTION(output_proxy(output_proxy const& that), BOOST_NOEXCEPT : m_f(that.m_f) {}) + BOOST_DELETED_FUNCTION(output_proxy& operator=(output_proxy const&)) + private: UnaryFunction& m_f; };