|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r68524 - in branches/release: boost/iterator libs/iterator/test
From: dnljms_at_[hidden]
Date: 2011-01-28 03:40:28
Author: danieljames
Date: 2011-01-28 03:40:25 EST (Fri, 28 Jan 2011)
New Revision: 68524
URL: http://svn.boost.org/trac/boost/changeset/68524
Log:
Revert [68076], refs #1427.
Will try to fix this properly in 1.47.
Properties modified:
branches/release/boost/iterator/iterator_facade.hpp (props changed)
branches/release/boost/iterator/transform_iterator.hpp (contents, props changed)
branches/release/libs/iterator/test/transform_iterator_test.cpp (contents, props changed)
Text files modified:
branches/release/boost/iterator/transform_iterator.hpp | 27 ++++++++++++++++++++-------
branches/release/libs/iterator/test/transform_iterator_test.cpp | 30 ------------------------------
2 files changed, 20 insertions(+), 37 deletions(-)
Modified: branches/release/boost/iterator/transform_iterator.hpp
==============================================================================
--- branches/release/boost/iterator/transform_iterator.hpp (original)
+++ branches/release/boost/iterator/transform_iterator.hpp 2011-01-28 03:40:25 EST (Fri, 28 Jan 2011)
@@ -20,8 +20,6 @@
#include <boost/type_traits/is_reference.hpp>
#include <boost/type_traits/remove_const.hpp>
#include <boost/type_traits/remove_reference.hpp>
-#include <boost/utility/result_of.hpp>
-
#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310))
# include <boost/type_traits/is_base_and_derived.hpp>
@@ -37,18 +35,33 @@
namespace detail
{
+
+ template <class UnaryFunc>
+ struct function_object_result
+ {
+ typedef typename UnaryFunc::result_type type;
+ };
+
+#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+ template <class Return, class Argument>
+ struct function_object_result<Return(*)(Argument)>
+ {
+ typedef Return type;
+ };
+#endif
+
// Compute the iterator_adaptor instantiation to be used for transform_iterator
template <class UnaryFunc, class Iterator, class Reference, class Value>
struct transform_iterator_base
{
private:
- typedef typename std::iterator_traits<Iterator>::reference Arg1;
-
// By default, dereferencing the iterator yields the same as
- // the function.
+ // the function. Do we need to adjust the way
+ // function_object_result is computed for the standard
+ // proposal (e.g. using Doug's result_of)?
typedef typename ia_dflt_help<
Reference
- , result_of<UnaryFunc(typename std::iterator_traits<Iterator>::value_type)>
+ , function_object_result<UnaryFunc>
>::type reference;
// To get the default for Value: remove any reference on the
@@ -100,7 +113,7 @@
#endif
}
- template <
+ template<
class OtherUnaryFunction
, class OtherIterator
, class OtherReference
Modified: branches/release/libs/iterator/test/transform_iterator_test.cpp
==============================================================================
--- branches/release/libs/iterator/test/transform_iterator_test.cpp (original)
+++ branches/release/libs/iterator/test/transform_iterator_test.cpp 2011-01-28 03:40:25 EST (Fri, 28 Jan 2011)
@@ -102,16 +102,6 @@
return arg*2;
}
-struct polymorphic_mult_functor
-{
- //Implement result_of protocol
- template <class FArgs> struct result;
- template <class F, class T> struct result<F(T)> {typedef T type;};
-
- template <class T>
- typename result<polymorphic_mult_functor(T)>::type
- operator()(const T& _arg) const {return _arg*2;}
-};
int
main()
@@ -254,25 +244,5 @@
);
}
- // Test transform_iterator with polymorphic object function
- {
- int x[N], y[N];
- for (int k = 0; k < N; ++k)
- x[k] = k;
- std::copy(x, x + N, y);
-
- for (int k2 = 0; k2 < N; ++k2)
- x[k2] = x[k2] * 2;
-
- boost::input_iterator_test(
- boost::make_transform_iterator(y, polymorphic_mult_functor()), x[0], x[1]);
-
- boost::input_iterator_test(
- boost::make_transform_iterator(&y[0], polymorphic_mult_functor()), x[0], x[1]);
-
- boost::random_access_readable_iterator_test(
- boost::make_transform_iterator(y, polymorphic_mult_functor()), N, x);
- }
-
return boost::report_errors();
}
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk