Add conversion constructor to convert ArrayRef<T*> to ArrayRef<const T*>. Reviewed...
authorCraig Topper <craig.topper@gmail.com>
Fri, 29 Aug 2014 06:01:43 +0000 (06:01 +0000)
committerCraig Topper <craig.topper@gmail.com>
Fri, 29 Aug 2014 06:01:43 +0000 (06:01 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216709 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/ArrayRef.h

index 0351cf5bb4c43809d3bd97e31a7dfde2345157be..8c14a423c8f50614ff30856b19d11c96774b359e 100644 (file)
@@ -104,6 +104,14 @@ namespace llvm {
       Length(Vec.size()) {}
 #endif
 
+    /// Construct an ArrayRef<const T*> from ArrayRef<T*>. This uses SFINAE to
+    /// ensure that only ArrayRefs of pointers can be converted.
+    template <typename U>
+    ArrayRef(const ArrayRef<U *> &A,
+             typename std::enable_if<
+                 std::is_convertible<U *const *, T const *>::value>::type* = 0)
+      : Data(A.data()), Length(A.size()) {}
+
     /// @}
     /// @name Simple Operations
     /// @{