42 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// <mutex>10 11// template <class Mutex> class unique_lock;12 13// explicit operator bool() const noexcept;14 15#include <cassert>16#include <mutex>17#include <type_traits>18 19#include "checking_mutex.h"20#include "test_macros.h"21 22#if TEST_STD_VER >= 1123static_assert(noexcept(static_cast<bool>(std::declval<std::unique_lock<checking_mutex>&>())), "");24#endif25 26int main(int, char**) {27 static_assert(std::is_constructible<bool, std::unique_lock<checking_mutex> >::value, "");28 static_assert(!std::is_convertible<std::unique_lock<checking_mutex>, bool>::value, "");29 30 checking_mutex mux;31 const std::unique_lock<checking_mutex> lk0; // Make sure `operator bool()` is `const`32 assert(!static_cast<bool>(lk0));33 std::unique_lock<checking_mutex> lk1(mux);34 assert(static_cast<bool>(lk1));35 lk1.unlock();36 assert(!static_cast<bool>(lk1));37 38 ASSERT_NOEXCEPT(static_cast<bool>(lk0));39 40 return 0;41}42