1ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant//===----------------------------------------------------------------------===//
2ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant//
3ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant//                     The LLVM Compiler Infrastructure
4ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant//
5ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant//
8ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant//===----------------------------------------------------------------------===//
9ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant
10ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant// <shared_mutex>
11ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant
12ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant// template <class Mutex> class shared_lock;
13ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant
14ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant// explicit operator bool() const noexcept;
15ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant
16ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant#include <shared_mutex>
17ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant#include <cassert>
18ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant
19ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant#if _LIBCPP_STD_VER > 11
20ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant
21f9f95be93091c60e7c9034670f298d5a2fba8686David Majnemerstd::shared_timed_mutex m;
22ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant
23ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant#endif  // _LIBCPP_STD_VER > 11
24ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant
25ba898e42081aec544a04d282834aa99b13d57803Howard Hinnantint main()
26ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant{
27ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant#if _LIBCPP_STD_VER > 11
28f9f95be93091c60e7c9034670f298d5a2fba8686David Majnemer    std::shared_lock<std::shared_timed_mutex> lk0;
29ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant    assert(static_cast<bool>(lk0) == false);
30f9f95be93091c60e7c9034670f298d5a2fba8686David Majnemer    std::shared_lock<std::shared_timed_mutex> lk1(m);
31ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant    assert(static_cast<bool>(lk1) == true);
32ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant    lk1.unlock();
33ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant    assert(static_cast<bool>(lk1) == false);
34ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant    static_assert(noexcept(static_cast<bool>(lk0)), "explicit operator bool() must be noexcept");
35ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant#endif  // _LIBCPP_STD_VER > 11
36ba898e42081aec544a04d282834aa99b13d57803Howard Hinnant}
37