blob: bfa27ddca0d464b020e550e0bb530fc78a2ec08f [file] [log] [blame]
Eric Fiselier601f7632020-04-08 22:00:131// -*- C++ -*-
Arthur O'Dwyer58915662021-07-29 05:08:302//===----------------------------------------------------------------------===//
Eric Fiselier601f7632020-04-08 22:00:133//
4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5// See https://llvm.org/LICENSE.txt for license information.
6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef _LIBCPP_CONCEPTS
11#define _LIBCPP_CONCEPTS
12
13/*
14 concepts synopsis
15namespace std {
16 // [concepts.lang], language-related concepts
17 // [concept.same], concept same_as
18 template<class T, class U>
19 concept same_as = see below;
20
21 // [concept.derived], concept derived_from
22 template<class Derived, class Base>
23 concept derived_from = see below;
24
25 // [concept.convertible], concept convertible_to
26 template<class From, class To>
27 concept convertible_to = see below;
28
29 // [concept.commonref], concept common_reference_with
30 template<class T, class U>
31 concept common_reference_with = see below;
32
33 // [concept.common], concept common_with
34 template<class T, class U>
35 concept common_with = see below;
36
37 // [concepts.arithmetic], arithmetic concepts
38 template<class T>
39 concept integral = see below;
40 template<class T>
41 concept signed_integral = see below;
42 template<class T>
43 concept unsigned_integral = see below;
44 template<class T>
45 concept floating_point = see below;
46
47 // [concept.assignable], concept assignable_from
48 template<class LHS, class RHS>
49 concept assignable_from = see below;
50
51 // [concept.swappable], concept swappable
52 namespace ranges {
53 inline namespace unspecified {
54 inline constexpr unspecified swap = unspecified;
55 }
56 }
57 template<class T>
58 concept swappable = see below;
59 template<class T, class U>
60 concept swappable_with = see below;
61
62 // [concept.destructible], concept destructible
63 template<class T>
64 concept destructible = see below;
65
66 // [concept.constructible], concept constructible_from
67 template<class T, class... Args>
68 concept constructible_from = see below;
69
Christopher Di Bella920c0f72021-04-02 18:07:3170 // [concept.default.init], concept default_initializable
Eric Fiselier601f7632020-04-08 22:00:1371 template<class T>
Christopher Di Bella920c0f72021-04-02 18:07:3172 concept default_initializable = see below;
Eric Fiselier601f7632020-04-08 22:00:1373
74 // [concept.moveconstructible], concept move_constructible
75 template<class T>
76 concept move_constructible = see below;
77
78 // [concept.copyconstructible], concept copy_constructible
79 template<class T>
80 concept copy_constructible = see below;
81
Eric Fiselier601f7632020-04-08 22:00:1382 // [concept.equalitycomparable], concept equality_comparable
83 template<class T>
84 concept equality_comparable = see below;
85 template<class T, class U>
86 concept equality_comparable_with = see below;
87
88 // [concept.totallyordered], concept totally_ordered
89 template<class T>
90 concept totally_ordered = see below;
91 template<class T, class U>
92 concept totally_ordered_with = see below;
93
94 // [concepts.object], object concepts
95 template<class T>
96 concept movable = see below;
97 template<class T>
98 concept copyable = see below;
99 template<class T>
100 concept semiregular = see below;
101 template<class T>
102 concept regular = see below;
103
104 // [concepts.callable], callable concepts
105 // [concept.invocable], concept invocable
106 template<class F, class... Args>
107 concept invocable = see below;
108
109 // [concept.regularinvocable], concept regular_invocable
110 template<class F, class... Args>
111 concept regular_invocable = see below;
112
113 // [concept.predicate], concept predicate
114 template<class F, class... Args>
115 concept predicate = see below;
116
117 // [concept.relation], concept relation
118 template<class R, class T, class U>
119 concept relation = see below;
120
121 // [concept.equiv], concept equivalence_relation
122 template<class R, class T, class U>
123 concept equivalence_relation = see below;
124
125 // [concept.strictweakorder], concept strict_weak_order
126 template<class R, class T, class U>
127 concept strict_weak_order = see below;
128}
129
130*/
131
Arthur O'Dwyer58915662021-07-29 05:08:30132#include <__concepts/arithmetic.h>
133#include <__concepts/assignable.h>
134#include <__concepts/boolean_testable.h>
135#include <__concepts/class_or_enum.h>
136#include <__concepts/common_reference_with.h>
137#include <__concepts/common_with.h>
138#include <__concepts/constructible.h>
139#include <__concepts/convertible_to.h>
140#include <__concepts/copyable.h>
141#include <__concepts/derived_from.h>
142#include <__concepts/destructible.h>
143#include <__concepts/different_from.h>
144#include <__concepts/equality_comparable.h>
145#include <__concepts/invocable.h>
146#include <__concepts/movable.h>
147#include <__concepts/predicate.h>
148#include <__concepts/regular.h>
149#include <__concepts/relation.h>
150#include <__concepts/same_as.h>
151#include <__concepts/semiregular.h>
152#include <__concepts/swappable.h>
153#include <__concepts/totally_ordered.h>
Eric Fiselier601f7632020-04-08 22:00:13154#include <__config>
Eric Fiselier601f7632020-04-08 22:00:13155#include <version>
156
157#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
158#pragma GCC system_header
159#endif
160
Eric Fiselier601f7632020-04-08 22:00:13161#endif // _LIBCPP_CONCEPTS