diff --git a/include/momo/Array.h b/include/momo/Array.h
index 6af787cd..5fd143d1 100644
--- a/include/momo/Array.h
+++ b/include/momo/Array.h
@@ -1163,14 +1163,15 @@ namespace std
 {
 	template<typename... Params>
 	class back_insert_iterator<momo::Array<Params...>>
-		: public momo::internal::BackInsertIteratorStd<momo::Array<Params...>>
+		: public momo::internal::BackInsertIteratorStdBase<momo::Array<Params...>>
 	{
 	private:
-		typedef momo::internal::BackInsertIteratorStd<momo::Array<Params...>> BackInsertIteratorStd;
+		typedef momo::internal::BackInsertIteratorStdBase<momo::Array<Params...>>
+			BackInsertIteratorStdBase;
 
 	public:
-		using BackInsertIteratorStd::BackInsertIteratorStd;
-		using BackInsertIteratorStd::operator=;
+		using BackInsertIteratorStdBase::BackInsertIteratorStdBase;
+		using BackInsertIteratorStdBase::operator=;
 	};
 } // namespace std
 
diff --git a/include/momo/ArrayUtility.h b/include/momo/ArrayUtility.h
index 9cdf9a56..f46bdeb6 100644
--- a/include/momo/ArrayUtility.h
+++ b/include/momo/ArrayUtility.h
@@ -302,13 +302,13 @@ namespace internal
 	};
 
 	template<typename TContainer>
-	class BackInsertIteratorStd
+	class BackInsertIteratorStdBase
 	{
 	private:
 		typedef TContainer Container;
 		typedef typename Container::Item Item;
 
-		typedef std::back_insert_iterator<Container> Iterator;
+		typedef std::back_insert_iterator<Container> BackInsertIteratorStd;
 
 	public:
 		typedef Container container_type;
@@ -319,34 +319,36 @@ namespace internal
 		typedef void value_type;
 
 	public:
-		explicit BackInsertIteratorStd(Container& cont) noexcept
+		explicit BackInsertIteratorStdBase(Container& cont) noexcept
 			: container(&cont)
 		{
 		}
 
-		Iterator& operator=(Item&& item)
+		BackInsertIteratorStd& operator=(Item&& item)
 		{
 			container->AddBack(std::move(item));
 			return **this;
 		}
 
-		Iterator& operator=(const Item& item)
+		BackInsertIteratorStd& operator=(const Item& item)
 		{
 			container->AddBack(item);
 			return **this;
 		}
 
-		Iterator& operator*() noexcept
+		BackInsertIteratorStd& operator*() noexcept
 		{
-			return *static_cast<Iterator*>(this);
+			MOMO_STATIC_ASSERT(std::is_base_of<BackInsertIteratorStdBase,
+				BackInsertIteratorStd>::value);
+			return *static_cast<BackInsertIteratorStd*>(this);
 		}
 
-		Iterator& operator++() noexcept
+		BackInsertIteratorStd& operator++() noexcept
 		{
 			return **this;
 		}
 
-		Iterator operator++(int) noexcept
+		BackInsertIteratorStd operator++(int) noexcept
 		{
 			return **this;
 		}
diff --git a/include/momo/SegmentedArray.h b/include/momo/SegmentedArray.h
index 42184ce7..515ee71f 100644
--- a/include/momo/SegmentedArray.h
+++ b/include/momo/SegmentedArray.h
@@ -752,14 +752,15 @@ namespace std
 {
 	template<typename... Params>
 	class back_insert_iterator<momo::SegmentedArray<Params...>>
-		: public momo::internal::BackInsertIteratorStd<momo::SegmentedArray<Params...>>
+		: public momo::internal::BackInsertIteratorStdBase<momo::SegmentedArray<Params...>>
 	{
 	private:
-		typedef momo::internal::BackInsertIteratorStd<momo::SegmentedArray<Params...>> BackInsertIteratorStd;
+		typedef momo::internal::BackInsertIteratorStdBase<momo::SegmentedArray<Params...>>
+			BackInsertIteratorStdBase;
 
 	public:
-		using BackInsertIteratorStd::BackInsertIteratorStd;
-		using BackInsertIteratorStd::operator=;
+		using BackInsertIteratorStdBase::BackInsertIteratorStdBase;
+		using BackInsertIteratorStdBase::operator=;
 	};
 } // namespace std