
Sebastian Redl <sebastian.redl <at> getdesigned.at> writes:
Markus Werle wrote:
Hi!
This was detected by profiling. I expected the code below to have a rather cheap std::distance call because my iterator was tagged as random_access.
std::distance doesn't understand the new iterator categories,
Ouch! The tutorial is definitely too short! So I can use std::random_access_iterator_tag instead? I simply want an iterator that works with current STL as random iterator. Class Demo uses a std::size_t as index type. How do I build my iterator with iterator_facade? Problem: If I use template <typename ValueT, typename SizeT, typename IndexOperatorT> class signal_iter : public boost::iterator_facade <signal_iter<ValueT, SizeT, IndexOperatorT>, ValueT, std::random_access_iterator_tag, ValueT> { [...] } iterator_facade implementation applies unary minus to unsigned type in its code: template <class Facade1, class Facade2> static typename Facade1::difference_type distance_from( Facade1 const& f1, Facade2 const& f2, mpl::true_) { return -f1.distance_to(f2); } How can I circumvent this? Markus