summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@gmail.com>2014-08-29 06:01:43 +0000
committerCraig Topper <craig.topper@gmail.com>2014-08-29 06:01:43 +0000
commit7e24c0a89c0c936a4763c60e3c4c573852a26231 (patch)
treeab10b6f5a2b2484fe9d500ef1ff1146a4013d2f7
parent780dd3b71af51a8a3d9aeed55cd7b7aaa88370f5 (diff)
downloadbcm5719-llvm-7e24c0a89c0c936a4763c60e3c4c573852a26231.tar.gz
bcm5719-llvm-7e24c0a89c0c936a4763c60e3c4c573852a26231.zip
Add conversion constructor to convert ArrayRef<T*> to ArrayRef<const T*>. Reviewed with Chandler and David Blaikie.
llvm-svn: 216709
-rw-r--r--llvm/include/llvm/ADT/ArrayRef.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/llvm/include/llvm/ADT/ArrayRef.h b/llvm/include/llvm/ADT/ArrayRef.h
index 0351cf5bb4c..8c14a423c8f 100644
--- a/llvm/include/llvm/ADT/ArrayRef.h
+++ b/llvm/include/llvm/ADT/ArrayRef.h
@@ -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
/// @{
OpenPOWER on IntegriCloud