move_pair.pass.cpp revision c52f43e72dfcea03037729649da84c23b3beb04a
15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===----------------------------------------------------------------------===// 25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// The LLVM Compiler Infrastructure 45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// This file is distributed under the University of Illinois Open Source 60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// License. See LICENSE.TXT for details. 75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===----------------------------------------------------------------------===// 95f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// <tuple> 115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// template <class... Types> class tuple; 135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// template <class U1, class U2> tuple(pair<U1, U2>&& u); 155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include <tuple> 1733e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis#include <utility> 182eefd8657c233bc7c9330acfe475fc270bbe7cabTed Kremenek#include <memory> 190827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis#include <cassert> 2028019772db70d4547be05a042eb950bc910f134fDouglas Gregor 21bdbb004f38978da0c4a75af3294d1c7b5ff84af1Douglas Gregorstruct B 223f09327b26033d0a9676d52d80cf92c48f581affDouglas Gregor{ 235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer int id_; 2433e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 250827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis explicit B(int i) : id_(i) {} 26f4c839657742b823cea1a95b18422f1ba74d3dddChris Lattner 275f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer virtual ~B() {} 28b2153946fff330e54abfdc740c0a83aedd485b33Anders Carlsson}; 2933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis 30d42ffbd22fc7eb61321f6a88173ee424991f01c6Ted Kremenekstruct D 3133e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis : B 3240469651a3f8379dc0f32df69e9bade06a2aad36Chris Lattner{ 337d90199f109290e9d587479a481a2850d390b552Daniel Dunbar explicit D(int i) : B(i) {} 349c4eb1f3438370355f51dc8c62f2ca4803e3338dArgyrios Kyrtzidis}; 35e59abb56ce0e1c206fb80bd945a0c358b0abe1efArgyrios Kyrtzidis 361eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumpint main() 374b2d3f7bcc4df31157df443af1b80bcaa9b58bbaDouglas Gregor{ 384b2d3f7bcc4df31157df443af1b80bcaa9b58bbaDouglas Gregor { 394b2d3f7bcc4df31157df443af1b80bcaa9b58bbaDouglas Gregor typedef std::pair<double, std::unique_ptr<D>> T0; 404b2d3f7bcc4df31157df443af1b80bcaa9b58bbaDouglas Gregor typedef std::tuple<int, std::unique_ptr<B>> T1; 414b2d3f7bcc4df31157df443af1b80bcaa9b58bbaDouglas Gregor T0 t0(2.5, std::unique_ptr<D>(new D(3))); 424b2d3f7bcc4df31157df443af1b80bcaa9b58bbaDouglas Gregor T1 t1 = std::move(t0); 434b2d3f7bcc4df31157df443af1b80bcaa9b58bbaDouglas Gregor assert(std::get<0>(t1) == 2); 44b2fb6de9070fea9abc56c8e8d5469066e964cefeDouglas Gregor assert(std::get<1>(t1)->id_ == 3); 454b2d3f7bcc4df31157df443af1b80bcaa9b58bbaDouglas Gregor } 46849b243d4065f56742a4677d6dc8277609a151f8Douglas Gregor} 474b2d3f7bcc4df31157df443af1b80bcaa9b58bbaDouglas Gregor