alloc_move_pair.pass.cpp revision ebedffde9adff4b56d3ccf6adcee8dc092404f0e
1f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek//===----------------------------------------------------------------------===// 2f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek// 3f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek// The LLVM Compiler Infrastructure 4f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek// 5f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek// This file is dual licensed under the MIT and the University of Illinois Open 6f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek// Source Licenses. See LICENSE.TXT for details. 7f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek// 8f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek//===----------------------------------------------------------------------===// 9f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek 10f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek// <tuple> 11f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek 12f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek// template <class... Types> class tuple; 13f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek 14d95e0b830ed031f2ea0e15e3679cd51b9bf23a9cAnna Zaks// template <class Alloc, class U1, class U2> 15d95e0b830ed031f2ea0e15e3679cd51b9bf23a9cAnna Zaks// tuple(allocator_arg_t, const Alloc& a, pair<U1, U2>&&); 16e6348c336fecc8da9288ea367375a1b1cd2358d2Argyrios Kyrtzidis 17f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek#include <tuple> 18f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek#include <utility> 19802be99a6817aba6edb166b93c133da4358aa783Zhongxing Xu#include <memory> 20f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek#include <cassert> 21efceabd2380f49306bc0229583458e93b062094bDaniel Dunbar 22aa5609891df937291bf962dd2fc7deb2ceae292fAnna Zaks#include "allocators.h" 23efceabd2380f49306bc0229583458e93b062094bDaniel Dunbar#include "../alloc_first.h" 24d95e0b830ed031f2ea0e15e3679cd51b9bf23a9cAnna Zaks#include "../alloc_last.h" 2527af04bcca46f8a3374586be1301477f9123f5e1Argyrios Kyrtzidis 2643dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidisstruct B 2721142581d55918beed544a757e4af3bb865b1812Ted Kremenek{ 289b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek int id_; 299b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek 309b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek explicit B(int i) : id_(i) {} 319b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek 32f39d962cf84f46d2c0512157259ae1d41a1a5173David Blaikie virtual ~B() {} 33a7af5ea88a6c5bdf87497cca6c20831e8c546751Argyrios Kyrtzidis}; 34efceabd2380f49306bc0229583458e93b062094bDaniel Dunbar 35efceabd2380f49306bc0229583458e93b062094bDaniel Dunbarstruct D 369b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar : B 37efceabd2380f49306bc0229583458e93b062094bDaniel Dunbar{ 38f8ce6991f41d55b6e8526b7a7919771428e2b181Ted Kremenek explicit D(int i) : B(i) {} 3903013fa9a0bf1ef4b907f5fec006c8f4000fdd21Michael J. Spencer}; 4003013fa9a0bf1ef4b907f5fec006c8f4000fdd21Michael J. Spencer 41d38f79543136ba68cd14b1dab0856474df1fbfd5Anna Zaksint main() 42d95e0b830ed031f2ea0e15e3679cd51b9bf23a9cAnna Zaks{ 436cb7c1a43b0c8f739d1f54b7fdae5ede86033496Benjamin Kramer { 446a86082f3a06a2dcceaaf63f78a0e52d64bcbaa3Anna Zaks typedef std::pair<int, std::unique_ptr<D>> T0; 4581fb169f42769e02c7425b23885a261c025fd5e6Anna Zaks typedef std::tuple<alloc_first, std::unique_ptr<B>> T1; 46db09a4dee28a4515438af60f2d2b4a83e4965c31Ted Kremenek T0 t0(2, std::unique_ptr<D>(new D(3))); 477fe8dcef71ae56e43fd7df345db2895f84f2d0caAnna Zaks alloc_first::allocator_constructed = false; 487fe8dcef71ae56e43fd7df345db2895f84f2d0caAnna Zaks T1 t1(std::allocator_arg, A1<int>(5), std::move(t0)); 49f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek assert(alloc_first::allocator_constructed); 509ef6537a894c33003359b1f9b9676e9178e028b7Ted Kremenek assert(std::get<0>(t1) == 2); 51d95e0b830ed031f2ea0e15e3679cd51b9bf23a9cAnna Zaks assert(std::get<1>(t1)->id_ == 3); 52f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek } 53c5619d901a68dc27a9e310a6a831f03efebcd950Zhongxing Xu} 54ff944a8c481d6c0f1ad2633e4be9bf8b1dd2a09fZhongxing Xu