move.pass.cpp revision f5256e16dfc425c1d466f6308d4026d529ce9e0b
1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <tuple>
11
12// template <class... Types> class tuple;
13
14// tuple(tuple&& u);
15
16#include <tuple>
17#include <cassert>
18
19#include "../MoveOnly.h"
20
21int main()
22{
23    {
24        typedef std::tuple<> T;
25        T t0;
26        T t = std::move(t0);
27    }
28    {
29        typedef std::tuple<MoveOnly> T;
30        T t0(MoveOnly(0));
31        T t = std::move(t0);
32        assert(std::get<0>(t) == 0);
33    }
34    {
35        typedef std::tuple<MoveOnly, MoveOnly> T;
36        T t0(MoveOnly(0), MoveOnly(1));
37        T t = std::move(t0);
38        assert(std::get<0>(t) == 0);
39        assert(std::get<1>(t) == 1);
40    }
41    {
42        typedef std::tuple<MoveOnly, MoveOnly, MoveOnly> T;
43        T t0(MoveOnly(0), MoveOnly(1), MoveOnly(2));
44        T t = std::move(t0);
45        assert(std::get<0>(t) == 0);
46        assert(std::get<1>(t) == 1);
47        assert(std::get<2>(t) == 2);
48    }
49}
50