xref: /llvm-project/libcxx/include/__cxx03/concepts (revision ce7771902dc50d900de639d499a60486b83f70e0)
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