15ffd83dbSDimitry Andric// -*- C++ -*- 2349cc55cSDimitry Andric//===----------------------------------------------------------------------===// 35ffd83dbSDimitry Andric// 45ffd83dbSDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 55ffd83dbSDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 65ffd83dbSDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 75ffd83dbSDimitry Andric// 85ffd83dbSDimitry Andric//===----------------------------------------------------------------------===// 95ffd83dbSDimitry Andric 105ffd83dbSDimitry Andric#ifndef _LIBCPP_CONCEPTS 115ffd83dbSDimitry Andric#define _LIBCPP_CONCEPTS 125ffd83dbSDimitry Andric 135ffd83dbSDimitry Andric/* 145ffd83dbSDimitry Andric concepts synopsis 155ffd83dbSDimitry Andricnamespace std { 165ffd83dbSDimitry Andric // [concepts.lang], language-related concepts 175ffd83dbSDimitry Andric // [concept.same], concept same_as 185ffd83dbSDimitry Andric template<class T, class U> 195ffd83dbSDimitry Andric concept same_as = see below; 205ffd83dbSDimitry Andric 215ffd83dbSDimitry Andric // [concept.derived], concept derived_from 225ffd83dbSDimitry Andric template<class Derived, class Base> 235ffd83dbSDimitry Andric concept derived_from = see below; 245ffd83dbSDimitry Andric 255ffd83dbSDimitry Andric // [concept.convertible], concept convertible_to 265ffd83dbSDimitry Andric template<class From, class To> 275ffd83dbSDimitry Andric concept convertible_to = see below; 285ffd83dbSDimitry Andric 295ffd83dbSDimitry Andric // [concept.commonref], concept common_reference_with 305ffd83dbSDimitry Andric template<class T, class U> 315ffd83dbSDimitry Andric concept common_reference_with = see below; 325ffd83dbSDimitry Andric 335ffd83dbSDimitry Andric // [concept.common], concept common_with 345ffd83dbSDimitry Andric template<class T, class U> 355ffd83dbSDimitry Andric concept common_with = see below; 365ffd83dbSDimitry Andric 375ffd83dbSDimitry Andric // [concepts.arithmetic], arithmetic concepts 385ffd83dbSDimitry Andric template<class T> 395ffd83dbSDimitry Andric concept integral = see below; 405ffd83dbSDimitry Andric template<class T> 415ffd83dbSDimitry Andric concept signed_integral = see below; 425ffd83dbSDimitry Andric template<class T> 435ffd83dbSDimitry Andric concept unsigned_integral = see below; 445ffd83dbSDimitry Andric template<class T> 455ffd83dbSDimitry Andric concept floating_point = see below; 465ffd83dbSDimitry Andric 475ffd83dbSDimitry Andric // [concept.assignable], concept assignable_from 485ffd83dbSDimitry Andric template<class LHS, class RHS> 495ffd83dbSDimitry Andric concept assignable_from = see below; 505ffd83dbSDimitry Andric 515ffd83dbSDimitry Andric // [concept.swappable], concept swappable 525ffd83dbSDimitry Andric namespace ranges { 535ffd83dbSDimitry Andric inline namespace unspecified { 545ffd83dbSDimitry Andric inline constexpr unspecified swap = unspecified; 555ffd83dbSDimitry Andric } 565ffd83dbSDimitry Andric } 575ffd83dbSDimitry Andric template<class T> 585ffd83dbSDimitry Andric concept swappable = see below; 595ffd83dbSDimitry Andric template<class T, class U> 605ffd83dbSDimitry Andric concept swappable_with = see below; 615ffd83dbSDimitry Andric 625ffd83dbSDimitry Andric // [concept.destructible], concept destructible 635ffd83dbSDimitry Andric template<class T> 645ffd83dbSDimitry Andric concept destructible = see below; 655ffd83dbSDimitry Andric 665ffd83dbSDimitry Andric // [concept.constructible], concept constructible_from 675ffd83dbSDimitry Andric template<class T, class... Args> 685ffd83dbSDimitry Andric concept constructible_from = see below; 695ffd83dbSDimitry Andric 70fe6060f1SDimitry Andric // [concept.default.init], concept default_initializable 715ffd83dbSDimitry Andric template<class T> 72fe6060f1SDimitry Andric concept default_initializable = see below; 735ffd83dbSDimitry Andric 745ffd83dbSDimitry Andric // [concept.moveconstructible], concept move_constructible 755ffd83dbSDimitry Andric template<class T> 765ffd83dbSDimitry Andric concept move_constructible = see below; 775ffd83dbSDimitry Andric 785ffd83dbSDimitry Andric // [concept.copyconstructible], concept copy_constructible 795ffd83dbSDimitry Andric template<class T> 805ffd83dbSDimitry Andric concept copy_constructible = see below; 815ffd83dbSDimitry Andric 825ffd83dbSDimitry Andric // [concept.equalitycomparable], concept equality_comparable 835ffd83dbSDimitry Andric template<class T> 845ffd83dbSDimitry Andric concept equality_comparable = see below; 855ffd83dbSDimitry Andric template<class T, class U> 865ffd83dbSDimitry Andric concept equality_comparable_with = see below; 875ffd83dbSDimitry Andric 885ffd83dbSDimitry Andric // [concept.totallyordered], concept totally_ordered 895ffd83dbSDimitry Andric template<class T> 905ffd83dbSDimitry Andric concept totally_ordered = see below; 915ffd83dbSDimitry Andric template<class T, class U> 925ffd83dbSDimitry Andric concept totally_ordered_with = see below; 935ffd83dbSDimitry Andric 945ffd83dbSDimitry Andric // [concepts.object], object concepts 955ffd83dbSDimitry Andric template<class T> 965ffd83dbSDimitry Andric concept movable = see below; 975ffd83dbSDimitry Andric template<class T> 985ffd83dbSDimitry Andric concept copyable = see below; 995ffd83dbSDimitry Andric template<class T> 1005ffd83dbSDimitry Andric concept semiregular = see below; 1015ffd83dbSDimitry Andric template<class T> 1025ffd83dbSDimitry Andric concept regular = see below; 1035ffd83dbSDimitry Andric 1045ffd83dbSDimitry Andric // [concepts.callable], callable concepts 1055ffd83dbSDimitry Andric // [concept.invocable], concept invocable 1065ffd83dbSDimitry Andric template<class F, class... Args> 1075ffd83dbSDimitry Andric concept invocable = see below; 1085ffd83dbSDimitry Andric 1095ffd83dbSDimitry Andric // [concept.regularinvocable], concept regular_invocable 1105ffd83dbSDimitry Andric template<class F, class... Args> 1115ffd83dbSDimitry Andric concept regular_invocable = see below; 1125ffd83dbSDimitry Andric 1135ffd83dbSDimitry Andric // [concept.predicate], concept predicate 1145ffd83dbSDimitry Andric template<class F, class... Args> 1155ffd83dbSDimitry Andric concept predicate = see below; 1165ffd83dbSDimitry Andric 1175ffd83dbSDimitry Andric // [concept.relation], concept relation 1185ffd83dbSDimitry Andric template<class R, class T, class U> 1195ffd83dbSDimitry Andric concept relation = see below; 1205ffd83dbSDimitry Andric 1215ffd83dbSDimitry Andric // [concept.equiv], concept equivalence_relation 1225ffd83dbSDimitry Andric template<class R, class T, class U> 1235ffd83dbSDimitry Andric concept equivalence_relation = see below; 1245ffd83dbSDimitry Andric 1255ffd83dbSDimitry Andric // [concept.strictweakorder], concept strict_weak_order 1265ffd83dbSDimitry Andric template<class R, class T, class U> 1275ffd83dbSDimitry Andric concept strict_weak_order = see below; 1285ffd83dbSDimitry Andric} 1295ffd83dbSDimitry Andric 1305ffd83dbSDimitry Andric*/ 1315ffd83dbSDimitry Andric 132*0fca6ea1SDimitry Andric#include <__config> 133*0fca6ea1SDimitry Andric 134*0fca6ea1SDimitry Andric#if _LIBCPP_STD_VER >= 20 135349cc55cSDimitry Andric# include <__concepts/arithmetic.h> 136349cc55cSDimitry Andric# include <__concepts/assignable.h> 137349cc55cSDimitry Andric# include <__concepts/boolean_testable.h> 138349cc55cSDimitry Andric# include <__concepts/class_or_enum.h> 139349cc55cSDimitry Andric# include <__concepts/common_reference_with.h> 140349cc55cSDimitry Andric# include <__concepts/common_with.h> 141349cc55cSDimitry Andric# include <__concepts/constructible.h> 142349cc55cSDimitry Andric# include <__concepts/convertible_to.h> 143349cc55cSDimitry Andric# include <__concepts/copyable.h> 144349cc55cSDimitry Andric# include <__concepts/derived_from.h> 145349cc55cSDimitry Andric# include <__concepts/destructible.h> 146349cc55cSDimitry Andric# include <__concepts/different_from.h> 147349cc55cSDimitry Andric# include <__concepts/equality_comparable.h> 148349cc55cSDimitry Andric# include <__concepts/invocable.h> 149349cc55cSDimitry Andric# include <__concepts/movable.h> 150349cc55cSDimitry Andric# include <__concepts/predicate.h> 151349cc55cSDimitry Andric# include <__concepts/regular.h> 152349cc55cSDimitry Andric# include <__concepts/relation.h> 153349cc55cSDimitry Andric# include <__concepts/same_as.h> 154349cc55cSDimitry Andric# include <__concepts/semiregular.h> 155349cc55cSDimitry Andric# include <__concepts/swappable.h> 156349cc55cSDimitry Andric# include <__concepts/totally_ordered.h> 157*0fca6ea1SDimitry Andric#endif // _LIBCPP_STD_VER >= 20 158*0fca6ea1SDimitry Andric 1595ffd83dbSDimitry Andric#include <version> 1605ffd83dbSDimitry Andric 161*0fca6ea1SDimitry Andric#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 17 162*0fca6ea1SDimitry Andric# include <cstddef> 163*0fca6ea1SDimitry Andric#endif 164*0fca6ea1SDimitry Andric 1657a6dacacSDimitry Andric#if _LIBCPP_STD_VER <= 20 && !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) 166bdd1243dSDimitry Andric# include <type_traits> 167bdd1243dSDimitry Andric#endif 168bdd1243dSDimitry Andric 1695ffd83dbSDimitry Andric#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 1705ffd83dbSDimitry Andric# pragma GCC system_header 1715ffd83dbSDimitry Andric#endif 1725ffd83dbSDimitry Andric 1735ffd83dbSDimitry Andric#endif // _LIBCPP_CONCEPTS 174