From 7b89c747d614f56e3defdc4421054627c4435b1d Mon Sep 17 00:00:00 2001 From: Tim Wynants Date: Thu, 12 Jan 2017 17:45:31 +0100 Subject: [PATCH] Ticket 12754 - operator| overload for boost::range_details::replace_holder is not SFINEA friendly include\boost\range\adaptor\replaced.hpp Make sure that the overload resolution doesn't choke on the value type factory when its considers the overload --- include/boost/range/adaptor/replaced.hpp | 30 ++++++++++-------------- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/include/boost/range/adaptor/replaced.hpp b/include/boost/range/adaptor/replaced.hpp index 1950b82..761ba20 100644 --- a/include/boost/range/adaptor/replaced.hpp +++ b/include/boost/range/adaptor/replaced.hpp @@ -101,12 +101,10 @@ namespace boost void operator=(const replace_holder&); }; - template< class SinglePassRange > + template< class SinglePassRange, + class RangeValueType = BOOST_DEDUCED_TYPENAME range_value::type> inline replaced_range - operator|( - SinglePassRange& r, - const replace_holder< - BOOST_DEDUCED_TYPENAME range_value::type>& f ) + operator|(SinglePassRange& r, const replace_holder& f) { BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept)); @@ -114,12 +112,10 @@ namespace boost return replaced_range(r, f.val1, f.val2); } - template< class SinglePassRange > + template< class SinglePassRange, + class RangeValueType = BOOST_DEDUCED_TYPENAME range_value::type> inline replaced_range - operator|( - const SinglePassRange& r, - const replace_holder< - BOOST_DEDUCED_TYPENAME range_value::type>& f) + operator|(const SinglePassRange& r, const replace_holder& f) { BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept)); @@ -139,11 +135,10 @@ namespace boost range_detail::forwarder2(); } - template + template< class SinglePassRange, + class RangeValueType = BOOST_DEDUCED_TYPENAME range_value::type> inline replaced_range - replace(SinglePassRange& rng, - BOOST_DEDUCED_TYPENAME range_value::type from, - BOOST_DEDUCED_TYPENAME range_value::type to) + replace(SinglePassRange& rng, RangeValueType from, RangeValueType to) { BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept)); @@ -151,11 +146,10 @@ namespace boost return replaced_range(rng, from, to); } - template + template< class SinglePassRange, + class RangeValueType = BOOST_DEDUCED_TYPENAME range_value::type> inline replaced_range - replace(const SinglePassRange& rng, - BOOST_DEDUCED_TYPENAME range_value::type from, - BOOST_DEDUCED_TYPENAME range_value::type to) + replace(const SinglePassRange& rng, RangeValueType from, RangeValueType to) { BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept));