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/where.hpp>
# include <boost/concept_check.hpp> # include <boost/concept_check.hpp>
template<typename RanIter> namespace fake
BOOST_CONCEPT_WHERE(
((boost::Mutable_RandomAccessIteratorConcept<RanIter>))
((boost::LessThanComparableConcept<typename boost::detail::iterator_traits<RanIter>::value_type>))
, (void))
fake_sort(RanIter,RanIter)
{ {
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 #endif // BOOST_LIBS_CONCEPT_CHECK_FAKE_SORT_DWA2006430_HPP

View File

@@ -462,9 +462,8 @@ namespace boost
: AssignableConcept<TT> : AssignableConcept<TT>
, EqualityComparableConcept<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; 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>::reference reference;
typedef typename boost::detail::iterator_traits<TT>::pointer pointer; typedef typename boost::detail::iterator_traits<TT>::pointer pointer;
typedef typename boost::detail::iterator_traits<TT>::iterator_category iterator_category; typedef typename boost::detail::iterator_traits<TT>::iterator_category iterator_category;
@@ -591,9 +590,10 @@ namespace boost
: RandomAccessIteratorConcept<TT> : RandomAccessIteratorConcept<TT>
, Mutable_BidirectionalIteratorConcept<TT> , Mutable_BidirectionalIteratorConcept<TT>
{ {
~Mutable_RandomAccessIteratorConcept() { ~Mutable_RandomAccessIteratorConcept()
i[n] = *i; // require element access and assignment {
} i[n] = *i; // require element access and assignment
}
private: private:
TT i; TT i;
typename boost::detail::iterator_traits<TT>::difference_type n; typename boost::detail::iterator_traits<TT>::difference_type n;

View File

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

View File

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