[ADT/NullablePtr] Allow implicit conversion of NullablePtr<OtherT> -> NullablePtr...
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Mon, 8 Jul 2013 19:12:01 +0000 (19:12 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Mon, 8 Jul 2013 19:12:01 +0000 (19:12 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185851 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/NullablePtr.h

index 8ddfd5d20abdcc702dd51711ecbc67aaf4bbbd37..e66c1d08cdeda916e11b8644317a8b8f73320e14 100644 (file)
@@ -14,6 +14,7 @@
 #ifndef LLVM_ADT_NULLABLEPTR_H
 #define LLVM_ADT_NULLABLEPTR_H
 
+#include "llvm/Support/type_traits.h"
 #include <cassert>
 #include <cstddef>
 
@@ -25,8 +26,17 @@ namespace llvm {
 template<class T>
 class NullablePtr {
   T *Ptr;
+  struct PlaceHolder {};
+
 public:
   NullablePtr(T *P = 0) : Ptr(P) {}
+
+  template<typename OtherT>
+  NullablePtr(NullablePtr<OtherT> Other,
+              typename enable_if<
+                is_base_of<T, OtherT>,
+                PlaceHolder
+              >::type = PlaceHolder()) : Ptr(Other.getPtrOrNull()) {}
   
   bool isNull() const { return Ptr == 0; }
   bool isNonNull() const { return Ptr != 0; }