fix this to work with allocators that have reference type with compilers
authorChris Lattner <sabre@nondot.org>
Sat, 4 Sep 2010 18:45:02 +0000 (18:45 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 4 Sep 2010 18:45:02 +0000 (18:45 +0000)
that diagnose invalid references to references.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113078 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/StringMap.h

index 59ff6aa4f6aa00ca03785dab05b35a0da53cac7a..1b20f4fdd9c33b97829b4a5359e0ad12ee50d9ff 100644 (file)
@@ -242,6 +242,9 @@ public:
 };
 
 
+template <typename T> struct ReferenceAdder { typedef T& result; };
+template <typename T> struct ReferenceAdder<T&> { typedef T result; };
+  
 /// StringMap - This is an unconventional map that is specialized for handling
 /// keys that are "strings", which are basically ranges of bytes. This does some
 /// funky memory allocation and hashing things to make it extremely efficient,
@@ -269,9 +272,10 @@ public:
     clear();
   }
 
-
-  AllocatorTy &getAllocator() { return Allocator; }
-  const AllocatorTy &getAllocator() const { return Allocator; }
+  typedef typename ReferenceAdder<AllocatorTy>::result AllocatorRefTy;
+  typedef typename ReferenceAdder<const AllocatorTy>::result AllocatorCRefTy;
+  AllocatorRefTy getAllocator() { return Allocator; }
+  AllocatorCRefTy getAllocator() const { return Allocator; }
 
   typedef const char* key_type;
   typedef ValueTy mapped_type;