|  | @@ -587,7 +587,7 @@ class Map {
 | 
	
		
			
				|  |  |      explicit MapAllocator(Arena* arena) : arena_(arena) {}
 | 
	
		
			
				|  |  |      template <typename X>
 | 
	
		
			
				|  |  |      MapAllocator(const MapAllocator<X>& allocator)
 | 
	
		
			
				|  |  | -        : arena_(allocator.arena_) {}
 | 
	
		
			
				|  |  | +        : arena_(allocator.arena_internal_only()) {}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      pointer allocate(size_type n, const_pointer hint = 0) {
 | 
	
		
			
				|  |  |        // If arena is not given, malloc needs to be called which doesn't
 | 
	
	
		
			
				|  | @@ -650,12 +650,15 @@ class Map {
 | 
	
		
			
				|  |  |        return std::numeric_limits<size_type>::max();
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    // To support gcc-4.4, which does not properly
 | 
	
		
			
				|  |  | +    // support templated friend classes
 | 
	
		
			
				|  |  | +    Arena* arena_internal_only() const {
 | 
	
		
			
				|  |  | +      return arena_;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |     private:
 | 
	
		
			
				|  |  |      typedef void DestructorSkippable_;
 | 
	
		
			
				|  |  |      Arena* const arena_;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    template <typename X>
 | 
	
		
			
				|  |  | -    friend class MapAllocator;
 | 
	
		
			
				|  |  |    };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // InnerMap's key type is Key and its value type is value_type*.  We use a
 |