50 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// UNSUPPORTED: no-threads10// UNSUPPORTED: c++0311 12// Test the interoperation of std::lock_guard with std::mutex, since that is such13// a common use case.14 15#include <cassert>16#include <mutex>17#include <type_traits>18#include <functional>19 20#include "make_test_thread.h"21#include "test_macros.h"22 23void do_try_lock(std::mutex& m) { assert(m.try_lock() == false); }24 25int main(int, char**) {26 {27 std::mutex m;28 {29 std::lock_guard<std::mutex> lg(m);30 std::thread t = support::make_test_thread(do_try_lock, std::ref(m));31 t.join();32 }33 34 // This should work because the lock_guard unlocked the mutex when it was destroyed above.35 m.lock();36 m.unlock();37 }38 39 // Test CTAD40#if TEST_STD_VER >= 1741 {42 std::mutex m;43 std::lock_guard lg(m);44 static_assert(std::is_same<decltype(lg), std::lock_guard<std::mutex>>::value, "");45 }46#endif47 48 return 0;49}50