Home | History | Annotate | Download | only in tuple.special
      1 //===----------------------------------------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is dual licensed under the MIT and the University of Illinois Open
      6 // Source Licenses. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 // <tuple>
     11 
     12 // template <class... Types> class tuple;
     13 
     14 // template <class... Types>
     15 //   void swap(tuple<Types...>& x, tuple<Types...>& y);
     16 
     17 #include <tuple>
     18 #include <cassert>
     19 
     20 #include "../MoveOnly.h"
     21 
     22 int main()
     23 {
     24     {
     25         typedef std::tuple<> T;
     26         T t0;
     27         T t1;
     28         swap(t0, t1);
     29     }
     30     {
     31         typedef std::tuple<MoveOnly> T;
     32         T t0(MoveOnly(0));
     33         T t1(MoveOnly(1));
     34         swap(t0, t1);
     35         assert(std::get<0>(t0) == 1);
     36         assert(std::get<0>(t1) == 0);
     37     }
     38     {
     39         typedef std::tuple<MoveOnly, MoveOnly> T;
     40         T t0(MoveOnly(0), MoveOnly(1));
     41         T t1(MoveOnly(2), MoveOnly(3));
     42         swap(t0, t1);
     43         assert(std::get<0>(t0) == 2);
     44         assert(std::get<1>(t0) == 3);
     45         assert(std::get<0>(t1) == 0);
     46         assert(std::get<1>(t1) == 1);
     47     }
     48     {
     49         typedef std::tuple<MoveOnly, MoveOnly, MoveOnly> T;
     50         T t0(MoveOnly(0), MoveOnly(1), MoveOnly(2));
     51         T t1(MoveOnly(3), MoveOnly(4), MoveOnly(5));
     52         swap(t0, t1);
     53         assert(std::get<0>(t0) == 3);
     54         assert(std::get<1>(t0) == 4);
     55         assert(std::get<2>(t0) == 5);
     56         assert(std::get<0>(t1) == 0);
     57         assert(std::get<1>(t1) == 1);
     58         assert(std::get<2>(t1) == 2);
     59     }
     60 }
     61