]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/std/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/move_ctor.pass.cpp
Vendor import of libc++ trunk r300422:
[FreeBSD/FreeBSD.git] / test / std / thread / thread.mutex / thread.lock / thread.lock.unique / thread.lock.unique.cons / move_ctor.pass.cpp
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 // UNSUPPORTED: libcpp-has-no-threads, c++98, c++03
11
12 // <mutex>
13
14 // template <class Mutex> class unique_lock;
15
16 // unique_lock(unique_lock&& u);
17
18 #include <mutex>
19 #include <cassert>
20 #include "nasty_containers.hpp"
21
22 int main()
23 {
24     {
25     typedef std::mutex M;
26     M m;
27     std::unique_lock<M> lk0(m);
28     std::unique_lock<M> lk = std::move(lk0);
29     assert(lk.mutex() == std::addressof(m));
30     assert(lk.owns_lock() == true);
31     assert(lk0.mutex() == nullptr);
32     assert(lk0.owns_lock() == false);
33     }
34     {
35     typedef nasty_mutex M;
36     M m;
37     std::unique_lock<M> lk0(m);
38     std::unique_lock<M> lk = std::move(lk0);
39     assert(lk.mutex() == std::addressof(m));
40     assert(lk.owns_lock() == true);
41     assert(lk0.mutex() == nullptr);
42     assert(lk0.owns_lock() == false);
43     }
44 }