// -*- C++ -*-
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

export namespace std {
#if _LIBCPP_HAS_THREADS
  // [thread.mutex.class], class mutex
  using std::mutex;
  // [thread.mutex.recursive], class recursive_mutex
  using std::recursive_mutex;
  // [thread.timedmutex.class] class timed_mutex
  using std::timed_mutex;
  // [thread.timedmutex.recursive], class recursive_timed_mutex
  using std::recursive_timed_mutex;

  using std::adopt_lock_t;
  using std::defer_lock_t;
  using std::try_to_lock_t;

  using std::adopt_lock;
  using std::defer_lock;
  using std::try_to_lock;

  // [thread.lock], locks
  using std::lock_guard;
  using std::scoped_lock;
  using std::unique_lock;

  using std::swap;

  // [thread.lock.algorithm], generic locking algorithms
  using std::lock;
  using std::try_lock;
#endif // _LIBCPP_HAS_THREADS

  using std::once_flag;

  using std::call_once;
} // namespace std
