diff --git a/include/boost/iterator/function_input_iterator.hpp b/include/boost/iterator/function_input_iterator.hpp index f3e9de9..a82b0c0 100644 --- a/include/boost/iterator/function_input_iterator.hpp +++ b/include/boost/iterator/function_input_iterator.hpp @@ -11,9 +11,9 @@ #include #include +#include #include #include -#include #include #include #include @@ -30,15 +30,15 @@ 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: 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) @@ -48,7 +48,7 @@ namespace iterators { ++state; } - BOOST_DEDUCED_TYPENAME result_of::type const & + typename result_of::type const & dereference() const { return (value ? value : value = (*f)()).get(); } @@ -60,7 +60,7 @@ namespace iterators { private: Function * f; Input state; - mutable optional::type> value; + mutable optional::type> value; }; template @@ -100,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 @@ -117,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) diff --git a/test/function_input_iterator_test.cpp b/test/function_input_iterator_test.cpp index 2574673..db8843b 100644 --- a/test/function_input_iterator_test.cpp +++ b/test/function_input_iterator_test.cpp @@ -6,7 +6,6 @@ #include #include -#include #include #include