From 479898d9d528f05a6631a1b95e37d638648b773e Mon Sep 17 00:00:00 2001 From: morinmorin Date: Wed, 6 Sep 2017 19:41:24 +0900 Subject: [PATCH 1/4] Remove unnecessary headers in test. --- test/function_input_iterator_test.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/test/function_input_iterator_test.cpp b/test/function_input_iterator_test.cpp index 0e3f97f..526f51c 100644 --- a/test/function_input_iterator_test.cpp +++ b/test/function_input_iterator_test.cpp @@ -6,7 +6,6 @@ #include #include -#include #include #include From 282b28e51fca8be79c4b5473baa0ad97444de838 Mon Sep 17 00:00:00 2001 From: morinmorin Date: Wed, 6 Sep 2017 19:47:55 +0900 Subject: [PATCH 2/4] Use boost::addressof instead of &. --- include/boost/iterator/function_input_iterator.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/boost/iterator/function_input_iterator.hpp b/include/boost/iterator/function_input_iterator.hpp index f3e9de9..2c78278 100644 --- a/include/boost/iterator/function_input_iterator.hpp +++ b/include/boost/iterator/function_input_iterator.hpp @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -38,7 +39,7 @@ namespace iterators { public: function_input_iterator() {} function_input_iterator(Function & f_, Input state_ = Input()) - : f(&f_), state(state_) {} + : f(boost::addressof(f_)), state(state_) {} void increment() { if(value) From ba32745e808e96f5d9034fda4d933d60655861c0 Mon Sep 17 00:00:00 2001 From: morinmorin Date: Wed, 6 Sep 2017 19:50:15 +0900 Subject: [PATCH 3/4] Replace ugly `BOOST_DEDUCED_TYPENAME` with `typename`. --- include/boost/iterator/function_input_iterator.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/boost/iterator/function_input_iterator.hpp b/include/boost/iterator/function_input_iterator.hpp index 2c78278..f4035e6 100644 --- a/include/boost/iterator/function_input_iterator.hpp +++ b/include/boost/iterator/function_input_iterator.hpp @@ -31,9 +31,9 @@ namespace iterators { class function_input_iterator : public iterator_facade< function_input_iterator, - BOOST_DEDUCED_TYPENAME result_of::type, + typename result_of::type, single_pass_traversal_tag, - BOOST_DEDUCED_TYPENAME result_of::type const & + typename result_of::type const & > { public: @@ -49,7 +49,7 @@ namespace iterators { ++state; } - BOOST_DEDUCED_TYPENAME result_of::type const & + typename result_of::type const & dereference() const { return (value ? value : value = (*f)()).get(); } @@ -61,7 +61,7 @@ namespace iterators { private: Function * f; Input state; - mutable optional::type> value; + mutable optional::type> value; }; template From 553b9713ac9d92cf53f3df4686f1e2088c154e98 Mon Sep 17 00:00:00 2001 From: morinmorin Date: Wed, 6 Sep 2017 23:12:18 +0900 Subject: [PATCH 4/4] Remove dead class template (i.e. function_reference_input_iterator). Both make_function_input_iterator(function) and make...(&function) do not depend on function_reference_input_iterator. Actually, passing a function reference as a template argument to function_input_iterator is not supported. Doing so results in compiler errors. --- .../iterator/function_input_iterator.hpp | 23 ++----------------- 1 file changed, 2 insertions(+), 21 deletions(-) diff --git a/include/boost/iterator/function_input_iterator.hpp b/include/boost/iterator/function_input_iterator.hpp index f4035e6..a82b0c0 100644 --- a/include/boost/iterator/function_input_iterator.hpp +++ b/include/boost/iterator/function_input_iterator.hpp @@ -14,7 +14,6 @@ #include #include #include -#include #include #include #include @@ -101,16 +100,6 @@ namespace iterators { mutable optional::type> value; }; - template - class function_reference_input_iterator - : public function_pointer_input_iterator - { - public: - function_reference_input_iterator(Function & f_, Input state_ = Input()) - : function_pointer_input_iterator(&f_, state_) - {} - }; - } // namespace impl template @@ -118,21 +107,13 @@ namespace iterators { : public mpl::if_< function_types::is_function_pointer, impl::function_pointer_input_iterator, - typename mpl::if_< - function_types::is_function_reference, - impl::function_reference_input_iterator, - impl::function_input_iterator - >::type + impl::function_input_iterator >::type { typedef typename mpl::if_< function_types::is_function_pointer, impl::function_pointer_input_iterator, - typename mpl::if_< - function_types::is_function_reference, - impl::function_reference_input_iterator, - impl::function_input_iterator - >::type + impl::function_input_iterator >::type base_type; public: function_input_iterator(Function & f, Input i)