1e78f53d1SNikolas Klauser// -*- C++ -*- 2e78f53d1SNikolas Klauser//===----------------------------------------------------------------------===// 3e78f53d1SNikolas Klauser// 4e78f53d1SNikolas Klauser// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5e78f53d1SNikolas Klauser// See https://llvm.org/LICENSE.txt for license information. 6e78f53d1SNikolas Klauser// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7e78f53d1SNikolas Klauser// 8e78f53d1SNikolas Klauser//===----------------------------------------------------------------------===// 9e78f53d1SNikolas Klauser 10*ce777190SNikolas Klauser#ifndef _LIBCPP___CXX03_CONCEPTS 11*ce777190SNikolas Klauser#define _LIBCPP___CXX03_CONCEPTS 12e78f53d1SNikolas Klauser 13e78f53d1SNikolas Klauser/* 14e78f53d1SNikolas Klauser concepts synopsis 15e78f53d1SNikolas Klausernamespace std { 16e78f53d1SNikolas Klauser // [concepts.lang], language-related concepts 17e78f53d1SNikolas Klauser // [concept.same], concept same_as 18e78f53d1SNikolas Klauser template<class T, class U> 19e78f53d1SNikolas Klauser concept same_as = see below; 20e78f53d1SNikolas Klauser 21e78f53d1SNikolas Klauser // [concept.derived], concept derived_from 22e78f53d1SNikolas Klauser template<class Derived, class Base> 23e78f53d1SNikolas Klauser concept derived_from = see below; 24e78f53d1SNikolas Klauser 25e78f53d1SNikolas Klauser // [concept.convertible], concept convertible_to 26e78f53d1SNikolas Klauser template<class From, class To> 27e78f53d1SNikolas Klauser concept convertible_to = see below; 28e78f53d1SNikolas Klauser 29e78f53d1SNikolas Klauser // [concept.commonref], concept common_reference_with 30e78f53d1SNikolas Klauser template<class T, class U> 31e78f53d1SNikolas Klauser concept common_reference_with = see below; 32e78f53d1SNikolas Klauser 33e78f53d1SNikolas Klauser // [concept.common], concept common_with 34e78f53d1SNikolas Klauser template<class T, class U> 35e78f53d1SNikolas Klauser concept common_with = see below; 36e78f53d1SNikolas Klauser 37e78f53d1SNikolas Klauser // [concepts.arithmetic], arithmetic concepts 38e78f53d1SNikolas Klauser template<class T> 39e78f53d1SNikolas Klauser concept integral = see below; 40e78f53d1SNikolas Klauser template<class T> 41e78f53d1SNikolas Klauser concept signed_integral = see below; 42e78f53d1SNikolas Klauser template<class T> 43e78f53d1SNikolas Klauser concept unsigned_integral = see below; 44e78f53d1SNikolas Klauser template<class T> 45e78f53d1SNikolas Klauser concept floating_point = see below; 46e78f53d1SNikolas Klauser 47e78f53d1SNikolas Klauser // [concept.assignable], concept assignable_from 48e78f53d1SNikolas Klauser template<class LHS, class RHS> 49e78f53d1SNikolas Klauser concept assignable_from = see below; 50e78f53d1SNikolas Klauser 51e78f53d1SNikolas Klauser // [concept.swappable], concept swappable 52e78f53d1SNikolas Klauser namespace ranges { 53e78f53d1SNikolas Klauser inline namespace unspecified { 54e78f53d1SNikolas Klauser inline constexpr unspecified swap = unspecified; 55e78f53d1SNikolas Klauser } 56e78f53d1SNikolas Klauser } 57e78f53d1SNikolas Klauser template<class T> 58e78f53d1SNikolas Klauser concept swappable = see below; 59e78f53d1SNikolas Klauser template<class T, class U> 60e78f53d1SNikolas Klauser concept swappable_with = see below; 61e78f53d1SNikolas Klauser 62e78f53d1SNikolas Klauser // [concept.destructible], concept destructible 63e78f53d1SNikolas Klauser template<class T> 64e78f53d1SNikolas Klauser concept destructible = see below; 65e78f53d1SNikolas Klauser 66e78f53d1SNikolas Klauser // [concept.constructible], concept constructible_from 67e78f53d1SNikolas Klauser template<class T, class... Args> 68e78f53d1SNikolas Klauser concept constructible_from = see below; 69e78f53d1SNikolas Klauser 70e78f53d1SNikolas Klauser // [concept.default.init], concept default_initializable 71e78f53d1SNikolas Klauser template<class T> 72e78f53d1SNikolas Klauser concept default_initializable = see below; 73e78f53d1SNikolas Klauser 74e78f53d1SNikolas Klauser // [concept.moveconstructible], concept move_constructible 75e78f53d1SNikolas Klauser template<class T> 76e78f53d1SNikolas Klauser concept move_constructible = see below; 77e78f53d1SNikolas Klauser 78e78f53d1SNikolas Klauser // [concept.copyconstructible], concept copy_constructible 79e78f53d1SNikolas Klauser template<class T> 80e78f53d1SNikolas Klauser concept copy_constructible = see below; 81e78f53d1SNikolas Klauser 82e78f53d1SNikolas Klauser // [concept.equalitycomparable], concept equality_comparable 83e78f53d1SNikolas Klauser template<class T> 84e78f53d1SNikolas Klauser concept equality_comparable = see below; 85e78f53d1SNikolas Klauser template<class T, class U> 86e78f53d1SNikolas Klauser concept equality_comparable_with = see below; 87e78f53d1SNikolas Klauser 88e78f53d1SNikolas Klauser // [concept.totallyordered], concept totally_ordered 89e78f53d1SNikolas Klauser template<class T> 90e78f53d1SNikolas Klauser concept totally_ordered = see below; 91e78f53d1SNikolas Klauser template<class T, class U> 92e78f53d1SNikolas Klauser concept totally_ordered_with = see below; 93e78f53d1SNikolas Klauser 94e78f53d1SNikolas Klauser // [concepts.object], object concepts 95e78f53d1SNikolas Klauser template<class T> 96e78f53d1SNikolas Klauser concept movable = see below; 97e78f53d1SNikolas Klauser template<class T> 98e78f53d1SNikolas Klauser concept copyable = see below; 99e78f53d1SNikolas Klauser template<class T> 100e78f53d1SNikolas Klauser concept semiregular = see below; 101e78f53d1SNikolas Klauser template<class T> 102e78f53d1SNikolas Klauser concept regular = see below; 103e78f53d1SNikolas Klauser 104e78f53d1SNikolas Klauser // [concepts.callable], callable concepts 105e78f53d1SNikolas Klauser // [concept.invocable], concept invocable 106e78f53d1SNikolas Klauser template<class F, class... Args> 107e78f53d1SNikolas Klauser concept invocable = see below; 108e78f53d1SNikolas Klauser 109e78f53d1SNikolas Klauser // [concept.regularinvocable], concept regular_invocable 110e78f53d1SNikolas Klauser template<class F, class... Args> 111e78f53d1SNikolas Klauser concept regular_invocable = see below; 112e78f53d1SNikolas Klauser 113e78f53d1SNikolas Klauser // [concept.predicate], concept predicate 114e78f53d1SNikolas Klauser template<class F, class... Args> 115e78f53d1SNikolas Klauser concept predicate = see below; 116e78f53d1SNikolas Klauser 117e78f53d1SNikolas Klauser // [concept.relation], concept relation 118e78f53d1SNikolas Klauser template<class R, class T, class U> 119e78f53d1SNikolas Klauser concept relation = see below; 120e78f53d1SNikolas Klauser 121e78f53d1SNikolas Klauser // [concept.equiv], concept equivalence_relation 122e78f53d1SNikolas Klauser template<class R, class T, class U> 123e78f53d1SNikolas Klauser concept equivalence_relation = see below; 124e78f53d1SNikolas Klauser 125e78f53d1SNikolas Klauser // [concept.strictweakorder], concept strict_weak_order 126e78f53d1SNikolas Klauser template<class R, class T, class U> 127e78f53d1SNikolas Klauser concept strict_weak_order = see below; 128e78f53d1SNikolas Klauser} 129e78f53d1SNikolas Klauser 130e78f53d1SNikolas Klauser*/ 131e78f53d1SNikolas Klauser 13273fbae83SNikolas Klauser#include <__cxx03/__config> 133e78f53d1SNikolas Klauser 134e78f53d1SNikolas Klauser#if _LIBCPP_STD_VER >= 20 13573fbae83SNikolas Klauser# include <__cxx03/__concepts/arithmetic.h> 13673fbae83SNikolas Klauser# include <__cxx03/__concepts/assignable.h> 13773fbae83SNikolas Klauser# include <__cxx03/__concepts/boolean_testable.h> 13873fbae83SNikolas Klauser# include <__cxx03/__concepts/class_or_enum.h> 13973fbae83SNikolas Klauser# include <__cxx03/__concepts/common_reference_with.h> 14073fbae83SNikolas Klauser# include <__cxx03/__concepts/common_with.h> 14173fbae83SNikolas Klauser# include <__cxx03/__concepts/constructible.h> 14273fbae83SNikolas Klauser# include <__cxx03/__concepts/convertible_to.h> 14373fbae83SNikolas Klauser# include <__cxx03/__concepts/copyable.h> 14473fbae83SNikolas Klauser# include <__cxx03/__concepts/derived_from.h> 14573fbae83SNikolas Klauser# include <__cxx03/__concepts/destructible.h> 14673fbae83SNikolas Klauser# include <__cxx03/__concepts/different_from.h> 14773fbae83SNikolas Klauser# include <__cxx03/__concepts/equality_comparable.h> 14873fbae83SNikolas Klauser# include <__cxx03/__concepts/invocable.h> 14973fbae83SNikolas Klauser# include <__cxx03/__concepts/movable.h> 15073fbae83SNikolas Klauser# include <__cxx03/__concepts/predicate.h> 15173fbae83SNikolas Klauser# include <__cxx03/__concepts/regular.h> 15273fbae83SNikolas Klauser# include <__cxx03/__concepts/relation.h> 15373fbae83SNikolas Klauser# include <__cxx03/__concepts/same_as.h> 15473fbae83SNikolas Klauser# include <__cxx03/__concepts/semiregular.h> 15573fbae83SNikolas Klauser# include <__cxx03/__concepts/swappable.h> 15673fbae83SNikolas Klauser# include <__cxx03/__concepts/totally_ordered.h> 157e78f53d1SNikolas Klauser#endif // _LIBCPP_STD_VER >= 20 158e78f53d1SNikolas Klauser 15973fbae83SNikolas Klauser#include <__cxx03/version> 160e78f53d1SNikolas Klauser 161e78f53d1SNikolas Klauser#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 17 16273fbae83SNikolas Klauser# include <__cxx03/cstddef> 163e78f53d1SNikolas Klauser#endif 164e78f53d1SNikolas Klauser 165e78f53d1SNikolas Klauser#if _LIBCPP_STD_VER <= 20 && !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) 16673fbae83SNikolas Klauser# include <__cxx03/type_traits> 167e78f53d1SNikolas Klauser#endif 168e78f53d1SNikolas Klauser 169e78f53d1SNikolas Klauser#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 170e78f53d1SNikolas Klauser# pragma GCC system_header 171e78f53d1SNikolas Klauser#endif 172e78f53d1SNikolas Klauser 173*ce777190SNikolas Klauser#endif // _LIBCPP___CXX03_CONCEPTS 174