forked from boostorg/fusion
@ -78,6 +78,51 @@ namespace boost { namespace fusion
|
|||||||
, mpl::int_<(Last::is_last?1:0)>
|
, mpl::int_<(Last::is_last?1:0)>
|
||||||
>::type
|
>::type
|
||||||
{};
|
{};
|
||||||
|
|
||||||
|
|
||||||
|
template <typename Iterator, bool IsLast_>
|
||||||
|
struct prior_impl
|
||||||
|
{
|
||||||
|
typedef typename Iterator::iterator_base_type base_type;
|
||||||
|
|
||||||
|
typedef typename
|
||||||
|
result_of::prior<base_type>::type
|
||||||
|
base_prior;
|
||||||
|
|
||||||
|
typedef pop_back_iterator<base_prior, false> type;
|
||||||
|
|
||||||
|
static type
|
||||||
|
call(Iterator const& i)
|
||||||
|
{
|
||||||
|
return type(fusion::prior(i.iterator_base));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename Iterator>
|
||||||
|
struct prior_impl<Iterator, true>
|
||||||
|
{
|
||||||
|
// If this is the last iterator, we'll have to double back
|
||||||
|
typedef typename Iterator::iterator_base_type base_type;
|
||||||
|
|
||||||
|
typedef typename
|
||||||
|
result_of::prior<
|
||||||
|
typename result_of::prior<base_type>::type
|
||||||
|
>::type
|
||||||
|
base_prior;
|
||||||
|
|
||||||
|
typedef pop_back_iterator<base_prior, false> type;
|
||||||
|
|
||||||
|
static type
|
||||||
|
call(Iterator const& i)
|
||||||
|
{
|
||||||
|
return type(fusion::prior(
|
||||||
|
fusion::prior(i.iterator_base)));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename Iterator>
|
||||||
|
struct prior : prior_impl<Iterator, Iterator::is_last>
|
||||||
|
{};
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace result_of
|
namespace result_of
|
||||||
|
@ -15,6 +15,9 @@
|
|||||||
#include <boost/fusion/algorithm/transformation/pop_back.hpp>
|
#include <boost/fusion/algorithm/transformation/pop_back.hpp>
|
||||||
#include <boost/fusion/algorithm/transformation/push_back.hpp>
|
#include <boost/fusion/algorithm/transformation/push_back.hpp>
|
||||||
#include <boost/fusion/algorithm/query/find.hpp>
|
#include <boost/fusion/algorithm/query/find.hpp>
|
||||||
|
#include <boost/fusion/include/back.hpp>
|
||||||
|
#include <boost/fusion/include/array.hpp>
|
||||||
|
#include <boost/array.hpp>
|
||||||
#include <boost/mpl/vector_c.hpp>
|
#include <boost/mpl/vector_c.hpp>
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -85,12 +88,17 @@ main()
|
|||||||
auto i1 = find<int>(popv);
|
auto i1 = find<int>(popv);
|
||||||
auto i2 = find<double>(pop);
|
auto i2 = find<double>(pop);
|
||||||
|
|
||||||
assert(i1 != end(pop));
|
BOOST_TEST(i1 != end(pop));
|
||||||
assert(i2 != end(pop));
|
BOOST_TEST(i2 != end(pop));
|
||||||
assert(i1 != i2);
|
BOOST_TEST(i1 != i2);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
{
|
||||||
|
boost::array<std::size_t, 2> a = { 10, 50 };
|
||||||
|
BOOST_TEST(back(pop_back(a)) == 10);
|
||||||
|
}
|
||||||
|
|
||||||
return boost::report_errors();
|
return boost::report_errors();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user