brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · 168ba19 Raw
72 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// UNSUPPORTED: no-threads, c++0310 11// <future>12 13// class future<R>14 15// future(future&& rhs);16 17#include <future>18#include <cassert>19 20#include "test_macros.h"21 22int main(int, char**)23{24    {25        typedef int T;26        std::promise<T> p;27        std::future<T> f0 = p.get_future();28        std::future<T> f = std::move(f0);29        assert(!f0.valid());30        assert(f.valid());31    }32    {33        typedef int T;34        std::future<T> f0;35        std::future<T> f = std::move(f0);36        assert(!f0.valid());37        assert(!f.valid());38    }39    {40        typedef int& T;41        std::promise<T> p;42        std::future<T> f0 = p.get_future();43        std::future<T> f = std::move(f0);44        assert(!f0.valid());45        assert(f.valid());46    }47    {48        typedef int& T;49        std::future<T> f0;50        std::future<T> f = std::move(f0);51        assert(!f0.valid());52        assert(!f.valid());53    }54    {55        typedef void T;56        std::promise<T> p;57        std::future<T> f0 = p.get_future();58        std::future<T> f = std::move(f0);59        assert(!f0.valid());60        assert(f.valid());61    }62    {63        typedef void T;64        std::future<T> f0;65        std::future<T> f = std::move(f0);66        assert(!f0.valid());67        assert(!f.valid());68    }69 70  return 0;71}72