Skip to content

Commit

Permalink
Revert [68076], refs #1427.
Browse files Browse the repository at this point in the history
Will try to fix this properly in 1.47.


git-svn-id: http://svn.boost.org/svn/boost/branches/release@68524 b8fc166d-592f-0410-95f2-cb63ce0dd405
  • Loading branch information
danieljames committed Jan 28, 2011
1 parent ee0a052 commit d2db2ea
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 37 deletions.
27 changes: 20 additions & 7 deletions boost/iterator/transform_iterator.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand All @@ -37,18 +35,33 @@ namespace boost

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
Expand Down Expand Up @@ -100,7 +113,7 @@ namespace boost
#endif
}

template <
template<
class OtherUnaryFunction
, class OtherIterator
, class OtherReference
Expand Down
30 changes: 0 additions & 30 deletions libs/iterator/test/transform_iterator_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -102,16 +102,6 @@ int mult_2(int arg)
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()
Expand Down Expand Up @@ -254,25 +244,5 @@ main()
);
}

// 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();
}

0 comments on commit d2db2ea

Please sign in to comment.