member_swap.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci//===----------------------------------------------------------------------===//
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci//
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci//                     The LLVM Compiler Infrastructure
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci//
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// This file is dual licensed under the MIT and the University of Illinois Open
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Source Licenses. See LICENSE.TXT for details.
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci//
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci//===----------------------------------------------------------------------===//
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// <tuple>
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// template <class... Types> class tuple;
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// void swap(tuple& rhs);
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <tuple>
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <cassert>
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "../MoveOnly.h"
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint main()
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci{
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    {
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        typedef std::tuple<> T;
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        T t0;
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        T t1;
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        t0.swap(t1);
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    {
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        typedef std::tuple<MoveOnly> T;
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        T t0(MoveOnly(0));
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        T t1(MoveOnly(1));
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        t0.swap(t1);
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        assert(std::get<0>(t0) == 1);
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        assert(std::get<0>(t1) == 0);
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    {
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        typedef std::tuple<MoveOnly, MoveOnly> T;
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        T t0(MoveOnly(0), MoveOnly(1));
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        T t1(MoveOnly(2), MoveOnly(3));
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        t0.swap(t1);
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        assert(std::get<0>(t0) == 2);
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        assert(std::get<1>(t0) == 3);
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        assert(std::get<0>(t1) == 0);
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        assert(std::get<1>(t1) == 1);
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    {
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        typedef std::tuple<MoveOnly, MoveOnly, MoveOnly> T;
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        T t0(MoveOnly(0), MoveOnly(1), MoveOnly(2));
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        T t1(MoveOnly(3), MoveOnly(4), MoveOnly(5));
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        t0.swap(t1);
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        assert(std::get<0>(t0) == 3);
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        assert(std::get<1>(t0) == 4);
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        assert(std::get<2>(t0) == 5);
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        assert(std::get<0>(t1) == 0);
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        assert(std::get<1>(t1) == 1);
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        assert(std::get<2>(t1) == 2);
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci