175 lines · plain
1// -*- C++ -*-2//===----------------------------------------------------------------------===//3//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-exception7//8//===----------------------------------------------------------------------===//9 10#ifndef _LIBCPP_CONCEPTS11#define _LIBCPP_CONCEPTS12 13/*14 concepts synopsis15namespace std {16 // [concepts.lang], language-related concepts17 // [concept.same], concept same_as18 template<class T, class U>19 concept same_as = see below;20 21 // [concept.derived], concept derived_from22 template<class Derived, class Base>23 concept derived_from = see below;24 25 // [concept.convertible], concept convertible_to26 template<class From, class To>27 concept convertible_to = see below;28 29 // [concept.commonref], concept common_reference_with30 template<class T, class U>31 concept common_reference_with = see below;32 33 // [concept.common], concept common_with34 template<class T, class U>35 concept common_with = see below;36 37 // [concepts.arithmetic], arithmetic concepts38 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_from48 template<class LHS, class RHS>49 concept assignable_from = see below;50 51 // [concept.swappable], concept swappable52 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 destructible63 template<class T>64 concept destructible = see below;65 66 // [concept.constructible], concept constructible_from67 template<class T, class... Args>68 concept constructible_from = see below;69 70 // [concept.default.init], concept default_initializable71 template<class T>72 concept default_initializable = see below;73 74 // [concept.moveconstructible], concept move_constructible75 template<class T>76 concept move_constructible = see below;77 78 // [concept.copyconstructible], concept copy_constructible79 template<class T>80 concept copy_constructible = see below;81 82 // [concept.equalitycomparable], concept equality_comparable83 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_ordered89 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 concepts95 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 concepts105 // [concept.invocable], concept invocable106 template<class F, class... Args>107 concept invocable = see below;108 109 // [concept.regularinvocable], concept regular_invocable110 template<class F, class... Args>111 concept regular_invocable = see below;112 113 // [concept.predicate], concept predicate114 template<class F, class... Args>115 concept predicate = see below;116 117 // [concept.relation], concept relation118 template<class R, class T, class U>119 concept relation = see below;120 121 // [concept.equiv], concept equivalence_relation122 template<class R, class T, class U>123 concept equivalence_relation = see below;124 125 // [concept.strictweakorder], concept strict_weak_order126 template<class R, class T, class U>127 concept strict_weak_order = see below;128}129 130*/131 132#if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)133# include <__cxx03/__config>134#else135# include <__config>136 137# if _LIBCPP_STD_VER >= 20138# include <__concepts/arithmetic.h>139# include <__concepts/assignable.h>140# include <__concepts/boolean_testable.h>141# include <__concepts/class_or_enum.h>142# include <__concepts/common_reference_with.h>143# include <__concepts/common_with.h>144# include <__concepts/constructible.h>145# include <__concepts/convertible_to.h>146# include <__concepts/copyable.h>147# include <__concepts/derived_from.h>148# include <__concepts/destructible.h>149# include <__concepts/different_from.h>150# include <__concepts/equality_comparable.h>151# include <__concepts/invocable.h>152# include <__concepts/movable.h>153# include <__concepts/predicate.h>154# include <__concepts/regular.h>155# include <__concepts/relation.h>156# include <__concepts/same_as.h>157# include <__concepts/semiregular.h>158# include <__concepts/swappable.h>159# include <__concepts/totally_ordered.h>160# endif // _LIBCPP_STD_VER >= 20161 162# include <version>163 164# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20165# include <cstddef>166# include <type_traits>167# endif168 169# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)170# pragma GCC system_header171# endif172#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)173 174#endif // _LIBCPP_CONCEPTS175