Switch to allow implicit construction. In many cases, we're wrapping

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
This commit is contained in:
Chandler Carruth 2013-11-09 05:55:03 +00:00
parent c197a3ab4d
commit 3481cdc573
2 changed files with 6 additions and 1 deletions

View 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()) {}

View 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());
}
}