brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.2 KiB · 3542a40 Raw
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