summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2013-11-09 05:55:03 +0000
committerChandler Carruth <chandlerc@gmail.com>2013-11-09 05:55:03 +0000
commit42fabdead04da9a2725e4370c2feadd5fbc9e450 (patch)
tree6e8768fab23a6b3e118e9affc763b379ff9e9c21 /llvm
parentb32a79f9354951bcb01f4171c3691ffbe020c052 (diff)
downloadbcm5719-llvm-42fabdead04da9a2725e4370c2feadd5fbc9e450.tar.gz
bcm5719-llvm-42fabdead04da9a2725e4370c2feadd5fbc9e450.zip
Switch to allow implicit construction. In many cases, we're wrapping
a derived type and this makes it *much* easier to write this code. llvm-svn: 194321
Diffstat (limited to 'llvm')
-rw-r--r--llvm/include/llvm/ADT/polymorphic_ptr.h2
-rw-r--r--llvm/unittests/ADT/polymorphic_ptr_test.cpp5
2 files changed, 6 insertions, 1 deletions
diff --git a/llvm/include/llvm/ADT/polymorphic_ptr.h b/llvm/include/llvm/ADT/polymorphic_ptr.h
index 6114b65a309..a1687474ef4 100644
--- a/llvm/include/llvm/ADT/polymorphic_ptr.h
+++ b/llvm/include/llvm/ADT/polymorphic_ptr.h
@@ -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()) {}
diff --git a/llvm/unittests/ADT/polymorphic_ptr_test.cpp b/llvm/unittests/ADT/polymorphic_ptr_test.cpp
index d9a2c3fdd11..fbe60df523c 100644
--- a/llvm/unittests/ADT/polymorphic_ptr_test.cpp
+++ b/llvm/unittests/ADT/polymorphic_ptr_test.cpp
@@ -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());
}
}
OpenPOWER on IntegriCloud