| // -*- 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 | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 |  | 
 | #ifndef _LIBCPP_CONCEPTS | 
 | #define _LIBCPP_CONCEPTS | 
 |  | 
 | /* | 
 |     concepts synopsis | 
 | namespace std { | 
 |   // [concepts.lang], language-related concepts | 
 |   // [concept.same], concept same_as | 
 |   template<class T, class U> | 
 |     concept same_as = see below; | 
 |  | 
 |   // [concept.derived], concept derived_from | 
 |   template<class Derived, class Base> | 
 |     concept derived_from = see below; | 
 |  | 
 |   // [concept.convertible], concept convertible_to | 
 |   template<class From, class To> | 
 |     concept convertible_to = see below; | 
 |  | 
 |   // [concept.commonref], concept common_reference_with | 
 |   template<class T, class U> | 
 |     concept common_reference_with = see below; | 
 |  | 
 |   // [concept.common], concept common_with | 
 |   template<class T, class U> | 
 |     concept common_with = see below; | 
 |  | 
 |   // [concepts.arithmetic], arithmetic concepts | 
 |   template<class T> | 
 |     concept integral = see below; | 
 |   template<class T> | 
 |     concept signed_integral = see below; | 
 |   template<class T> | 
 |     concept unsigned_integral = see below; | 
 |   template<class T> | 
 |     concept floating_point = see below; | 
 |  | 
 |   // [concept.assignable], concept assignable_from | 
 |   template<class LHS, class RHS> | 
 |     concept assignable_from = see below; | 
 |  | 
 |   // [concept.swappable], concept swappable | 
 |   namespace ranges { | 
 |     inline namespace unspecified { | 
 |       inline constexpr unspecified swap = unspecified; | 
 |     } | 
 |   } | 
 |   template<class T> | 
 |     concept swappable = see below; | 
 |   template<class T, class U> | 
 |     concept swappable_with = see below; | 
 |  | 
 |   // [concept.destructible], concept destructible | 
 |   template<class T> | 
 |     concept destructible = see below; | 
 |  | 
 |   // [concept.constructible], concept constructible_from | 
 |   template<class T, class... Args> | 
 |     concept constructible_from = see below; | 
 |  | 
 |   // [concept.default.init], concept default_initializable | 
 |   template<class T> | 
 |     concept default_initializable = see below; | 
 |  | 
 |   // [concept.moveconstructible], concept move_constructible | 
 |   template<class T> | 
 |     concept move_constructible = see below; | 
 |  | 
 |   // [concept.copyconstructible], concept copy_constructible | 
 |   template<class T> | 
 |     concept copy_constructible = see below; | 
 |  | 
 |   // [concept.equalitycomparable], concept equality_comparable | 
 |   template<class T> | 
 |     concept equality_comparable = see below; | 
 |   template<class T, class U> | 
 |     concept equality_comparable_with = see below; | 
 |  | 
 |   // [concept.totallyordered], concept totally_ordered | 
 |   template<class T> | 
 |     concept totally_ordered = see below; | 
 |   template<class T, class U> | 
 |     concept totally_ordered_with = see below; | 
 |  | 
 |   // [concepts.object], object concepts | 
 |   template<class T> | 
 |     concept movable = see below; | 
 |   template<class T> | 
 |     concept copyable = see below; | 
 |   template<class T> | 
 |     concept semiregular = see below; | 
 |   template<class T> | 
 |     concept regular = see below; | 
 |  | 
 |   // [concepts.callable], callable concepts | 
 |   // [concept.invocable], concept invocable | 
 |   template<class F, class... Args> | 
 |     concept invocable = see below; | 
 |  | 
 |   // [concept.regularinvocable], concept regular_invocable | 
 |   template<class F, class... Args> | 
 |     concept regular_invocable = see below; | 
 |  | 
 |   // [concept.predicate], concept predicate | 
 |   template<class F, class... Args> | 
 |     concept predicate = see below; | 
 |  | 
 |   // [concept.relation], concept relation | 
 |   template<class R, class T, class U> | 
 |     concept relation = see below; | 
 |  | 
 |   // [concept.equiv], concept equivalence_relation | 
 |   template<class R, class T, class U> | 
 |     concept equivalence_relation = see below; | 
 |  | 
 |   // [concept.strictweakorder], concept strict_weak_order | 
 |   template<class R, class T, class U> | 
 |     concept strict_weak_order = see below; | 
 | } | 
 |  | 
 | */ | 
 |  | 
 | #if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) | 
 | #  include <__cxx03/concepts> | 
 | #else | 
 | #  include <__config> | 
 |  | 
 | #  if _LIBCPP_STD_VER >= 20 | 
 | #    include <__concepts/arithmetic.h> | 
 | #    include <__concepts/assignable.h> | 
 | #    include <__concepts/boolean_testable.h> | 
 | #    include <__concepts/class_or_enum.h> | 
 | #    include <__concepts/common_reference_with.h> | 
 | #    include <__concepts/common_with.h> | 
 | #    include <__concepts/constructible.h> | 
 | #    include <__concepts/convertible_to.h> | 
 | #    include <__concepts/copyable.h> | 
 | #    include <__concepts/derived_from.h> | 
 | #    include <__concepts/destructible.h> | 
 | #    include <__concepts/different_from.h> | 
 | #    include <__concepts/equality_comparable.h> | 
 | #    include <__concepts/invocable.h> | 
 | #    include <__concepts/movable.h> | 
 | #    include <__concepts/predicate.h> | 
 | #    include <__concepts/regular.h> | 
 | #    include <__concepts/relation.h> | 
 | #    include <__concepts/same_as.h> | 
 | #    include <__concepts/semiregular.h> | 
 | #    include <__concepts/swappable.h> | 
 | #    include <__concepts/totally_ordered.h> | 
 | #  endif // _LIBCPP_STD_VER >= 20 | 
 |  | 
 | #  include <version> | 
 |  | 
 | #  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 | 
 | #    include <cstddef> | 
 | #    include <type_traits> | 
 | #  endif | 
 |  | 
 | #  if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) | 
 | #    pragma GCC system_header | 
 | #  endif | 
 | #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) | 
 |  | 
 | #endif // _LIBCPP_CONCEPTS |