diff --git a/include/boost/pending/iterator_adaptors.hpp b/include/boost/pending/iterator_adaptors.hpp index 3501e6a..74f4534 100644 --- a/include/boost/pending/iterator_adaptors.hpp +++ b/include/boost/pending/iterator_adaptors.hpp @@ -230,7 +230,8 @@ inline bool operator<=(const iterator_comparisons& xb, namespace detail { - // Dummy versions for iterators that don't support member access +#if defined(__sgi) && !defined(__GNUC__) + // Dummy versions for iterators that don't support various operators template inline typename Iter::pointer operator_arrow(const Iter&, std::input_iterator_tag) { @@ -242,33 +243,30 @@ namespace detail { return typename Iter::pointer(); } - // Real version + template + inline void advance_impl(Iter&, Diff, std::input_iterator_tag) { } + template + inline void advance_impl(Iter&, Diff, std::output_iterator_tag) { } + + template + inline void decrement_impl(Iter&, std::input_iterator_tag) { } + template + inline void decrement_impl(Iter&, std::output_iterator_tag) { } +#endif + + // Real versions template inline typename Iter::pointer operator_arrow(const Iter& i, std::forward_iterator_tag) { return &(*i); } - // Dummy version for non-random access iterators - template - inline void advance_impl(Iter&, Diff, std::input_iterator_tag) { } - template - inline void advance_impl(Iter&, Diff, std::output_iterator_tag) { } - - // Real version template inline void advance_impl(Iter& i, Diff n, std::random_access_iterator_tag) { i.policies().advance(i.iter(), n); } - // Dummy versions for non-bidirectional iterators - template - inline void decrement_impl(Iter&, std::input_iterator_tag) { } - template - inline void decrement_impl(Iter&, std::output_iterator_tag) { } - - // Real version template inline void decrement_impl(Iter& i, std::bidirectional_iterator_tag) {