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