Added missing value_type to InputIteratorConcept

Improved idiomatic fake_sort


[SVN r33889]
This commit is contained in:
Dave Abrahams
2006-05-01 13:17:48 +00:00
parent bfb6428417
commit 8c32f7a5e2
4 changed files with 19 additions and 14 deletions

View File

@@ -8,15 +8,20 @@
# include <boost/concept_check/where.hpp>
# include <boost/concept_check.hpp>
template<typename RanIter>
BOOST_CONCEPT_WHERE(
((boost::Mutable_RandomAccessIteratorConcept<RanIter>))
((boost::LessThanComparableConcept<typename boost::detail::iterator_traits<RanIter>::value_type>))
, (void))
fake_sort(RanIter,RanIter)
namespace fake
{
using namespace boost;
template<typename RanIter>
BOOST_CONCEPT_WHERE(
((Mutable_RandomAccessIteratorConcept<RanIter>))
((LessThanComparableConcept<typename Mutable_RandomAccessIteratorConcept<RanIter>::value_type>))
, (void))
sort(RanIter,RanIter)
{
}
}
#endif // BOOST_LIBS_CONCEPT_CHECK_FAKE_SORT_DWA2006430_HPP

View File

@@ -462,9 +462,8 @@ namespace boost
: AssignableConcept<TT>
, EqualityComparableConcept<TT>
{
// require iterator_traits typedef's
typedef typename boost::detail::iterator_traits<TT>::value_type value_type;
typedef typename boost::detail::iterator_traits<TT>::difference_type difference_type;
// Hmm, the following is a bit fragile
typedef typename boost::detail::iterator_traits<TT>::reference reference;
typedef typename boost::detail::iterator_traits<TT>::pointer pointer;
typedef typename boost::detail::iterator_traits<TT>::iterator_category iterator_category;
@@ -591,9 +590,10 @@ namespace boost
: RandomAccessIteratorConcept<TT>
, Mutable_BidirectionalIteratorConcept<TT>
{
~Mutable_RandomAccessIteratorConcept() {
i[n] = *i; // require element access and assignment
}
~Mutable_RandomAccessIteratorConcept()
{
i[n] = *i; // require element access and assignment
}
private:
TT i;
typename boost::detail::iterator_traits<TT>::difference_type n;

View File

@@ -8,6 +8,6 @@
int main()
{
std::vector<int> v;
fake_sort(v.begin(), v.end());
fake::sort(v.begin(), v.end());
return 0;
}

View File

@@ -8,6 +8,6 @@
int main()
{
std::list<int> v;
fake_sort(v.begin(), v.end());
fake::sort(v.begin(), v.end());
return 0;
}