diff --git a/alib2std/src/extensions/iterator.hpp b/alib2std/src/extensions/iterator.hpp index 1b2f482d7f2fcdead33179d9e9fb981b08faf6f9..1373c176b8fb94db993086f6b71c1affaf9518e3 100644 --- a/alib2std/src/extensions/iterator.hpp +++ b/alib2std/src/extensions/iterator.hpp @@ -14,17 +14,34 @@ namespace ext { template<class T> class reverser { - T& m_Container; + T & m_Container; public: - reverser(T& container) : m_Container ( container ) { + reverser ( T & container ) : m_Container ( container ) { } - std::reverse_iterator<typename std::conditional<std::is_const<T>::value,typename T::const_iterator,typename T::iterator>::type> begin() const { + typename T::reverse_iterator begin ( ) const { return m_Container.rbegin(); } - std::reverse_iterator<typename std::conditional<std::is_const<T>::value,typename T::const_iterator,typename T::iterator>::type> end() const { + typename T::reverse_iterator end ( ) const { + return m_Container.rend(); + } +}; + +template < class T > +class reverser < const T > { + const T & m_Container; + +public: + reverser ( const T & container ) : m_Container ( container ) { + } + + typename T::const_reverse_iterator begin ( ) const { + return m_Container.rbegin(); + } + + typename T::const_reverse_iterator end ( ) const { return m_Container.rend(); } };