#include #include #include #include #include #include #include #include #define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 1 #include typedef int ValueType; template struct Iterator : std::iterator { typedef std::iterator base; typedef typename std::iterator_traits::value_type value_type; typedef typename std::iterator_traits::difference_type difference_type; typedef typename std::iterator_traits::reference reference; typedef typename std::iterator_traits::pointer pointer; typedef typename std::iterator_traits::iterator_category iterator_category; Iterator(const Iterator&); Iterator* operator&(void); const Iterator* operator&(void) const; Iterator& operator++(void); Iterator operator++(int); bool operator==(const Iterator&) const; bool operator!=(const Iterator&) const; Iterator(); Iterator& operator--(void); Iterator operator--(int); }; struct Container { typedef Iterator iterator; typedef Iterator const_iterator; iterator begin(void); const_iterator begin(void) const; iterator end(void); const_iterator end(void) const; }; template BOOST_CONCEPT_REQUIRES ( ((boost::BidirectionalRangeConcept)) ((boost::BidirectionalRangeConcept, Iterator<> > >)) ((boost::BidirectionalRangeConcept)) , (void) ) check(...) {} int main(void) { return boost::exit_success; }