brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.7 KiB · 7c70321 Raw
74 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// <tuple>10 11// template <class... Types> class tuple;12 13// void swap(tuple& rhs);14 15// UNSUPPORTED: c++0316 17#include <tuple>18#include <cassert>19 20#include "test_macros.h"21#include "MoveOnly.h"22 23TEST_CONSTEXPR_CXX2024bool test()25{26    {27        typedef std::tuple<> T;28        T t0;29        T t1;30        t0.swap(t1);31    }32    {33        typedef std::tuple<MoveOnly> T;34        T t0(MoveOnly(0));35        T t1(MoveOnly(1));36        t0.swap(t1);37        assert(std::get<0>(t0) == 1);38        assert(std::get<0>(t1) == 0);39    }40    {41        typedef std::tuple<MoveOnly, MoveOnly> T;42        T t0(MoveOnly(0), MoveOnly(1));43        T t1(MoveOnly(2), MoveOnly(3));44        t0.swap(t1);45        assert(std::get<0>(t0) == 2);46        assert(std::get<1>(t0) == 3);47        assert(std::get<0>(t1) == 0);48        assert(std::get<1>(t1) == 1);49    }50    {51        typedef std::tuple<MoveOnly, MoveOnly, MoveOnly> T;52        T t0(MoveOnly(0), MoveOnly(1), MoveOnly(2));53        T t1(MoveOnly(3), MoveOnly(4), MoveOnly(5));54        t0.swap(t1);55        assert(std::get<0>(t0) == 3);56        assert(std::get<1>(t0) == 4);57        assert(std::get<2>(t0) == 5);58        assert(std::get<0>(t1) == 0);59        assert(std::get<1>(t1) == 1);60        assert(std::get<2>(t1) == 2);61    }62    return true;63}64 65int main(int, char**)66{67    test();68#if TEST_STD_VER > 1769    static_assert(test());70#endif71 72    return 0;73}74