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