From 03efd57e002a046fdc8093bf94c8bb83d705385b Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Tue, 24 Apr 2018 10:38:10 +0200
Subject: [PATCH] redesign reverse container adaptor

---
 alib2std/src/extensions/iterator.hpp | 25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/alib2std/src/extensions/iterator.hpp b/alib2std/src/extensions/iterator.hpp
index 1b2f482d7f..1373c176b8 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();
 	}
 };
-- 
GitLab