| 
					
				 | 
			
			
				@@ -2282,14 +2282,23 @@ namespace internal { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // This code based on net/proto/proto-array-internal.h by Jeffrey Yasskin 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // (jyasskin@google.com). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 template<typename Element> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-class RepeatedPtrIterator { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+class RepeatedPtrIterator 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    : public std::iterator< 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          std::random_access_iterator_tag, Element> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   typedef RepeatedPtrIterator<Element> iterator; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  typedef std::random_access_iterator_tag iterator_category; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  typedef std::iterator< 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          std::random_access_iterator_tag, Element> superclass; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // Shadow the value_type in std::iterator<> because const_iterator::value_type 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // needs to be T, not const T. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   typedef typename std::remove_const<Element>::type value_type; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  typedef std::ptrdiff_t difference_type; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  typedef Element* pointer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  typedef Element& reference; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // Let the compiler know that these are type names, so we don't have to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // write "typename" in front of them everywhere. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  typedef typename superclass::reference reference; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  typedef typename superclass::pointer pointer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  typedef typename superclass::difference_type difference_type; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   RepeatedPtrIterator() : it_(NULL) {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   explicit RepeatedPtrIterator(void* const* it) : it_(it) {} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2369,14 +2378,21 @@ class RepeatedPtrIterator { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // referenced by the iterator.  It should either be "void *" for a mutable 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // iterator, or "const void* const" for a constant iterator. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 template <typename Element, typename VoidPtr> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-class RepeatedPtrOverPtrsIterator { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+class RepeatedPtrOverPtrsIterator 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    : public std::iterator<std::random_access_iterator_tag, Element> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  public: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   typedef RepeatedPtrOverPtrsIterator<Element, VoidPtr> iterator; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  typedef std::random_access_iterator_tag iterator_category; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  typedef std::iterator<std::random_access_iterator_tag, Element> superclass; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // Shadow the value_type in std::iterator<> because const_iterator::value_type 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // needs to be T, not const T. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   typedef typename std::remove_const<Element>::type value_type; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  typedef std::ptrdiff_t difference_type; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  typedef Element* pointer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  typedef Element& reference; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // Let the compiler know that these are type names, so we don't have to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // write "typename" in front of them everywhere. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  typedef typename superclass::reference reference; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  typedef typename superclass::pointer pointer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  typedef typename superclass::difference_type difference_type; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   RepeatedPtrOverPtrsIterator() : it_(NULL) {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   explicit RepeatedPtrOverPtrsIterator(VoidPtr* it) : it_(it) {} 
			 |