summaryrefslogtreecommitdiffstats
path: root/libcxx/test/utilities/tuple/tuple.tuple/tuple.cnstr/move.pass.cpp
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2014-07-24 18:48:34 +0000
committerEric Fiselier <eric@efcs.ca>2014-07-24 18:48:34 +0000
commit567bb79bf2f414bd93162383b368985580725b13 (patch)
tree57beb701f61e1642f39fa3ad4fed77c3ac79d169 /libcxx/test/utilities/tuple/tuple.tuple/tuple.cnstr/move.pass.cpp
parentd1854f9cb1ff0ab7ebd73a438b5757ef5f98005d (diff)
downloadbcm5719-llvm-567bb79bf2f414bd93162383b368985580725b13.tar.gz
bcm5719-llvm-567bb79bf2f414bd93162383b368985580725b13.zip
D4451: Fix copy/move issues casude by __tuple_leafs's converting constructor
llvm-svn: 213888
Diffstat (limited to 'libcxx/test/utilities/tuple/tuple.tuple/tuple.cnstr/move.pass.cpp')
-rw-r--r--libcxx/test/utilities/tuple/tuple.tuple/tuple.cnstr/move.pass.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/libcxx/test/utilities/tuple/tuple.tuple/tuple.cnstr/move.pass.cpp b/libcxx/test/utilities/tuple/tuple.tuple/tuple.cnstr/move.pass.cpp
index 41e4b660760..8dc7d21ec28 100644
--- a/libcxx/test/utilities/tuple/tuple.tuple/tuple.cnstr/move.pass.cpp
+++ b/libcxx/test/utilities/tuple/tuple.tuple/tuple.cnstr/move.pass.cpp
@@ -18,6 +18,18 @@
#include "../MoveOnly.h"
+struct ConstructsWithTupleLeaf
+{
+ ConstructsWithTupleLeaf() {}
+
+ ConstructsWithTupleLeaf(ConstructsWithTupleLeaf const &) { assert(false); }
+ ConstructsWithTupleLeaf(ConstructsWithTupleLeaf &&) {}
+
+ template <class T>
+ ConstructsWithTupleLeaf(T t)
+ { assert(false); }
+};
+
int main()
{
{
@@ -46,4 +58,12 @@ int main()
assert(std::get<1>(t) == 1);
assert(std::get<2>(t) == 2);
}
+ // A bug in tuple caused __tuple_leaf to use its explicit converting constructor
+ // as its move constructor. This tests that ConstructsWithTupleLeaf is not called
+ // (w/ __tuple_leaf)
+ {
+ typedef std::tuple<ConstructsWithTupleLeaf> d_t;
+ d_t d((ConstructsWithTupleLeaf()));
+ d_t d2(static_cast<d_t &&>(d));
+ }
}
OpenPOWER on IntegriCloud