From 4d987f727858e16ea1f547373cbc6351f07a8408 Mon Sep 17 00:00:00 2001
From: John Preston <johnprestonmail@gmail.com>
Date: Sun, 17 Feb 2019 15:49:24 +0400
Subject: [PATCH] Fix index_based_iterator for const containers.

---
 .../SourceFiles/base/index_based_iterator.h   | 20 +++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/Telegram/SourceFiles/base/index_based_iterator.h b/Telegram/SourceFiles/base/index_based_iterator.h
index de1009a15..a4db272d0 100644
--- a/Telegram/SourceFiles/base/index_based_iterator.h
+++ b/Telegram/SourceFiles/base/index_based_iterator.h
@@ -18,12 +18,20 @@ public:
 
 	using value_type = typename Container::value_type;
 	using difference_type = typename Container::difference_type;
-	using pointer = typename Container::pointer;
-	using reference = typename Container::reference;
+	using pointer = std::conditional_t<
+		std::is_const_v<Container>,
+		typename Container::const_pointer,
+		typename Container::pointer>;
+	using reference = std::conditional_t<
+		std::is_const_v<Container>,
+		typename Container::const_reference,
+		typename Container::reference>;
+	using base_type = std::conditional_t<
+		std::is_const_v<Container>,
+		typename Container::const_iterator,
+		typename Container::iterator>;
 
-	index_based_iterator(
-		Container *container,
-		typename Container::iterator impl)
+	index_based_iterator(Container *container, base_type impl)
 		: _container(container)
 		, _index(impl - _container->begin()) {
 	}
@@ -99,7 +107,7 @@ public:
 		return !(*this < other);
 	}
 
-	typename Container::iterator base() const {
+	base_type base() const {
 		return _container->begin() + _index;
 	}