Switch to allow implicit construction. In many cases, we're wrapping
authorChandler Carruth <chandlerc@gmail.com>
Sat, 9 Nov 2013 05:55:03 +0000 (05:55 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Sat, 9 Nov 2013 05:55:03 +0000 (05:55 +0000)
a derived type and this makes it *much* easier to write this code.

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

include/llvm/ADT/polymorphic_ptr.h
unittests/ADT/polymorphic_ptr_test.cpp

index 6114b65a309dece89415dc24e186e911c7bae31e..a1687474ef41c5c2a7ab636b40ee78ac36d26e32 100644 (file)
@@ -38,7 +38,7 @@ template <typename T> class polymorphic_ptr {
   T *ptr;
 
 public:
-  explicit polymorphic_ptr(T *ptr = 0) : ptr(ptr) {}
+  polymorphic_ptr(T *ptr = 0) : ptr(ptr) {}
   polymorphic_ptr(const polymorphic_ptr &arg) : ptr(arg->clone()) {}
 #if LLVM_HAS_RVALUE_REFERENCES
   polymorphic_ptr(polymorphic_ptr &&arg) : ptr(arg.take()) {}
index d9a2c3fdd111d81f2596e41296c598674ef7712e..fbe60df523c23368b801b82d50266b490449be78 100644 (file)
@@ -113,6 +113,11 @@ TEST(polymorphic_ptr_test, Polymorphism) {
   copy = dummy_copy(b);
   EXPECT_NE(b, copy);
   EXPECT_EQ("DerivedB", copy->name());
+
+  // Test creating a copy out of a temporary directly.
+  copy = dummy_copy<polymorphic_ptr<Base> >(new DerivedA());
+  EXPECT_NE(a, copy);
+  EXPECT_EQ("DerivedA", copy->name());
 }
 
 }