740 lines
65 KiB
HTML
740 lines
65 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
|
|
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<title>标准库头文件 <concepts></title>
|
|
<link rel="stylesheet" href="ext.css" />
|
|
<link rel="stylesheet" href="site_modules.css" />
|
|
</head>
|
|
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_header_concepts skin-cppreference2 action-view cpp-navbar">
|
|
<div id="cpp-content-base">
|
|
<div id="content"><a id="top"></a>
|
|
<h1 id="firstHeading" class="firstHeading"><span style="font-size:0.7em; line-height:130%">标准库头文件</span> <concepts></h1>
|
|
<div id="bodyContent">
|
|
<div id="contentSub"><span class="subpages">< <a href="cpp.html">cpp</a>‎ | <a href="cpp-header.html">header</a></span></div>
|
|
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
|
|
<p>此头文件是<a href="cpp-concepts.html">概念</a>库的一部分。</p>
|
|
<table class="t-dsc-begin">
|
|
<tr>
|
|
<td colspan="2">
|
|
<h3><span class="mw-headline" id=".E6.A6.82.E5.BF.B5">概念</span></h3>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E6.A0.B8.E5.BF.83.E8.AF.AD.E8.A8.80.E6.A6.82.E5.BF.B5">核心语言概念</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-same_as.html"><span class="t-lines"><span>same_as</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定一个类型与另一类型相同<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-derived_from.html"><span class="t-lines"><span>derived_from</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定一个类型派生自另一类型<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-convertible_to.html"><span class="t-lines"><span>convertible_to</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定一个类型能隐式转换成另一类型<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-common_reference_with.html"><span class="t-lines"><span>common_reference_with</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定两个类型共有一个公共引用类型<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-common_with.html"><span class="t-lines"><span>common_with</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定两个类型共有一个公共类型<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-integral.html"><span class="t-lines"><span>integral</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定类型为整型类型<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-signed_integral.html"><span class="t-lines"><span>signed_integral</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定类型为有符号的整型类型<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-unsigned_integral.html"><span class="t-lines"><span>unsigned_integral</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定类型为无符号的整型类型<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-floating_point.html"><span class="t-lines"><span>floating_point</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定类型为浮点类型<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-assignable_from.html"><span class="t-lines"><span>assignable_from</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定一个类型能从另一类型赋值<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-swappable.html"><span class="t-lines"><span>swappable</span><span>swappable_with</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定一个类型能进行交换,或两个类型能彼此交换<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-destructible.html"><span class="t-lines"><span>destructible</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定能销毁该类型的对象<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-constructible_from.html"><span class="t-lines"><span>constructible_from</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定该类型的变量能从一组实参类型进行构造,或绑定到一组实参类型<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-default_initializable.html"><span class="t-lines"><span>default_initializable</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定能默认构造一个类型的对象<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-move_constructible.html"><span class="t-lines"><span>move_constructible</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定能移动构造一个类型的对象<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-copy_constructible.html"><span class="t-lines"><span>copy_constructible</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定能复制构造和移动构造一个类型的对象<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E6.AF.94.E8.BE.83.E6.A6.82.E5.BF.B5">比较概念</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-equality_comparable.html"><span class="t-lines"><span>equality_comparable</span><span>equality_comparable_with</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定运算符 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">==</span></span></span> 为等价关系<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-totally_ordered.html"><span class="t-lines"><span>totally_ordered</span><span>totally_ordered_with</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定比较运算符在该类型上产生全序<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E5.AF.B9.E8.B1.A1.E6.A6.82.E5.BF.B5">对象概念</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-movable.html"><span class="t-lines"><span>movable</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定能移动及交换一个类型的对象<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-copyable.html"><span class="t-lines"><span>copyable</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定能复制、移动及交换一个类型的对象<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-semiregular.html"><span class="t-lines"><span>semiregular</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定能赋值、移动、交换及默认构造一个类型的对象<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-regular.html"><span class="t-lines"><span>regular</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定类型为正则,即它既为 <a href="cpp-concepts-semiregular.html"><code>semiregular</code></a> 亦为 <a href="cpp-concepts-equality_comparable.html"><code>equality_comparable</code></a><br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h5><span class="mw-headline" id=".E5.8F.AF.E8.B0.83.E7.94.A8.E6.A6.82.E5.BF.B5">可调用概念</span></h5>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-invocable.html"><span class="t-lines"><span>invocable</span><span>regular_invocable</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定能以给定的一组实参类型调用的可调用类型<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-predicate.html"><span class="t-lines"><span>predicate</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定可调用类型为布尔谓词<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-relation.html"><span class="t-lines"><span>relation</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定可调用类型为二元关系<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-equivalence_relation.html"><span class="t-lines"><span>equivalence_relation</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定 <a href="cpp-concepts-relation.html"><code>relation</code></a> 施加等价关系<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-concepts-strict_weak_order.html"><span class="t-lines"><span>strict_weak_order</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>指定一个 <a href="cpp-concepts-relation.html"><code>relation</code></a> 所强加的是严格弱序<br />
|
|
<span class="t-mark">(概念)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<h3><span class="mw-headline" id=".E5.AE.9A.E5.88.B6.E7.82.B9.E5.AF.B9.E8.B1.A1">定制点对象</span></h3>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-utility-ranges-swap.html"><span class="t-lines"><span>ranges::swap</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx20">(C++20)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>交换两个对象的值<br />
|
|
<span class="t-mark">(定制点对象)</span></td>
|
|
</tr>
|
|
</table>
|
|
<p><br /></p>
|
|
<h3><span class="mw-headline" id=".E6.A6.82.E8.A6.81">概要</span></h3>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">namespace</span> std <span class="br0">{</span>
|
|
<span class="co1">// 语言相关概念</span>
|
|
<span class="co1">// 概念 same_as</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> U<span class="sy1">></span>
|
|
concept same_as <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 derived_from</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Derived, <span class="kw1">class</span> Base<span class="sy1">></span>
|
|
concept derived_from <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 convertible_to</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> From, <span class="kw1">class</span> To<span class="sy1">></span>
|
|
concept convertible_to <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 common_reference_with</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> U<span class="sy1">></span>
|
|
concept common_reference_with <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 common_with</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> U<span class="sy1">></span>
|
|
concept common_with <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 算术概念</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept integral <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept signed_integral <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept unsigned_integral <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept floating_point <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 assignable_from</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> LHS, <span class="kw1">class</span> RHS<span class="sy1">></span>
|
|
concept assignable_from <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 swappable</span>
|
|
<span class="kw1">namespace</span> ranges <span class="br0">{</span>
|
|
<span class="kw1">inline</span> <span class="kw1">namespace</span> <span class="coMULTI">/* 未指明 */</span> <span class="br0">{</span>
|
|
<span class="kw1">inline</span> <span class="kw4">constexpr</span> <span class="coMULTI">/* 未指明 */</span> swap <span class="sy1">=</span> <span class="coMULTI">/* 未指明 */</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<span class="br0">}</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept swappable <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> U<span class="sy1">></span>
|
|
concept swappable_with <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 destructible</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept destructible <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 constructible_from</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span>... <span class="me1">Args</span><span class="sy1">></span>
|
|
concept constructible_from <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 default_initializable</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept default_initializable <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 move_constructible</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept move_constructible <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 copy_constructible</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept copy_constructible <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 比较概念</span>
|
|
<span class="co1">// 概念 equality_comparable</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept equality_comparable <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> U<span class="sy1">></span>
|
|
concept equality_comparable_with <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 totally_ordered</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept totally_ordered <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> U<span class="sy1">></span>
|
|
concept totally_ordered_with <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 对象概念</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept movable <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept copyable <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept semiregular <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept regular <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 可调用概念</span>
|
|
<span class="co1">// 概念 invocable</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> F, <span class="kw1">class</span>... <span class="me1">Args</span><span class="sy1">></span>
|
|
concept invocable <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 regular_invocable</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> F, <span class="kw1">class</span>... <span class="me1">Args</span><span class="sy1">></span>
|
|
concept regular_invocable <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 predicate</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> F, <span class="kw1">class</span>... <span class="me1">Args</span><span class="sy1">></span>
|
|
concept predicate <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 relation</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> R, <span class="kw1">class</span> T, <span class="kw1">class</span> U<span class="sy1">></span>
|
|
concept relation <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 equivalence_relation</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> R, <span class="kw1">class</span> T, <span class="kw1">class</span> U<span class="sy1">></span>
|
|
concept equivalence_relation <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
|
|
<span class="co1">// 概念 strict_weak_order</span>
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> R, <span class="kw1">class</span> T, <span class="kw1">class</span> U<span class="sy1">></span>
|
|
concept strict_weak_order <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_same_as">概念 <a href="cpp-concepts-same_as.html"><code>same_as</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> U<span class="sy1">></span>
|
|
concept __SameImpl <span class="sy1">=</span> is_same_v<span class="sy1"><</span>T, U<span class="sy1">></span><span class="sy4">;</span> <span class="co1">// 仅为阐释</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> U<span class="sy1">></span>
|
|
concept same_as <span class="sy1">=</span> __SameImpl<span class="sy1"><</span>T, U<span class="sy1">></span> <span class="sy3">&&</span> __SameImpl<span class="sy1"><</span>U, T<span class="sy1">></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_derived_from">概念 <a href="cpp-concepts-derived_from.html"><code>derived_from</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> Derived, <span class="kw1">class</span> Base<span class="sy1">></span>
|
|
concept derived_from <span class="sy1">=</span>
|
|
is_base_of_v<span class="sy1"><</span>Base, Derived<span class="sy1">></span> <span class="sy3">&&</span>
|
|
is_convertible_v<span class="sy1"><</span><span class="kw4">const</span> <span class="kw4">volatile</span> Derived<span class="sy2">*</span>, <span class="kw4">const</span> <span class="kw4">volatile</span> Base<span class="sy2">*</span><span class="sy1">></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_convertible_to">概念 <a href="cpp-concepts-convertible_to.html"><code>convertible_to</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> From, <span class="kw1">class</span> To<span class="sy1">></span>
|
|
concept convertible_to <span class="sy1">=</span>
|
|
is_convertible_v<span class="sy1"><</span>From, To<span class="sy1">></span> <span class="sy3">&&</span>
|
|
requires<span class="br0">(</span>From <span class="br0">(</span><span class="sy3">&</span>f<span class="br0">)</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span>
|
|
<span class="kw1">static_cast</span><span class="sy1"><</span>To<span class="sy1">></span><span class="br0">(</span>f<span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_common_reference_with">概念 <a href="cpp-concepts-common_reference_with.html"><code>common_reference_with</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> U<span class="sy1">></span>
|
|
concept common_reference_with <span class="sy1">=</span>
|
|
same_as<span class="sy1"><</span>common_reference_t<span class="sy1"><</span>T, U<span class="sy1">></span>, common_reference_t<span class="sy1"><</span>U, T<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
convertible_to<span class="sy1"><</span>T, common_reference_t<span class="sy1"><</span>T, U<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
convertible_to<span class="sy1"><</span>U, common_reference_t<span class="sy1"><</span>T, U<span class="sy1">>></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_common_with">概念 <a href="cpp-concepts-common_with.html"><code>common_with</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> U<span class="sy1">></span>
|
|
concept common_with <span class="sy1">=</span>
|
|
same_as<span class="sy1"><</span>common_type_t<span class="sy1"><</span>T, U<span class="sy1">></span>, common_type_t<span class="sy1"><</span>U, T<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
requires <span class="br0">{</span>
|
|
<span class="kw1">static_cast</span><span class="sy1"><</span>common_type_t<span class="sy1"><</span>T, U<span class="sy1">>></span><span class="br0">(</span>declval<span class="sy1"><</span>T<span class="sy1">></span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">static_cast</span><span class="sy1"><</span>common_type_t<span class="sy1"><</span>T, U<span class="sy1">>></span><span class="br0">(</span>declval<span class="sy1"><</span>U<span class="sy1">></span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span> <span class="sy3">&&</span>
|
|
common_reference_with<span class="sy1"><</span>
|
|
add_lvalue_reference_t<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy1">></span>,
|
|
add_lvalue_reference_t<span class="sy1"><</span><span class="kw4">const</span> U<span class="sy1">>></span> <span class="sy3">&&</span>
|
|
common_reference_with<span class="sy1"><</span>
|
|
add_lvalue_reference_t<span class="sy1"><</span>common_type_t<span class="sy1"><</span>T, U<span class="sy1">>></span>,
|
|
common_reference_t<span class="sy1"><</span>
|
|
add_lvalue_reference_t<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy1">></span>,
|
|
add_lvalue_reference_t<span class="sy1"><</span><span class="kw4">const</span> U<span class="sy1">>>></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_integral">概念 <a href="cpp-concepts-integral.html"><code>integral</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept integral <span class="sy1">=</span> is_integral_v<span class="sy1"><</span>T<span class="sy1">></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_signed_integral">概念 <a href="cpp-concepts-signed_integral.html"><code>signed_integral</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept signed_integral <span class="sy1">=</span> integral<span class="sy1"><</span>T<span class="sy1">></span> <span class="sy3">&&</span> is_signed_v<span class="sy1"><</span>T<span class="sy1">></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_unsigned_integral">概念 <a href="cpp-concepts-unsigned_integral.html"><code>unsigned_integral</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept unsigned_integral <span class="sy1">=</span> integral<span class="sy1"><</span>T<span class="sy1">></span> <span class="sy3">&&</span> <span class="sy3">!</span>signed_integral<span class="sy1"><</span>T<span class="sy1">></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_floating_point">概念 <a href="cpp-concepts-floating_point.html"><code>floating_point</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept floating_point <span class="sy1">=</span> is_floating_point_v<span class="sy1"><</span>T<span class="sy1">></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_assignable_from">概念 <a href="cpp-concepts-assignable_from.html"><code>assignable_from</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> LHS, <span class="kw1">class</span> RHS<span class="sy1">></span>
|
|
concept assignable_from <span class="sy1">=</span>
|
|
is_lvalue_reference_v<span class="sy1"><</span>LHS<span class="sy1">></span> <span class="sy3">&&</span>
|
|
common_reference_with<span class="sy1"><</span>
|
|
<span class="kw4">const</span> remove_reference_t<span class="sy1"><</span>LHS<span class="sy1">></span><span class="sy3">&</span>,
|
|
<span class="kw4">const</span> remove_reference_t<span class="sy1"><</span>RHS<span class="sy1">></span><span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span>
|
|
requires<span class="br0">(</span>LHS lhs, RHS<span class="sy3">&&</span> rhs<span class="br0">)</span> <span class="br0">{</span>
|
|
<span class="br0">{</span> lhs <span class="sy1">=</span> <a href="cpp-utility-forward.html"><span class="kw1117">std::<span class="me2">forward</span></span></a><span class="sy1"><</span>RHS<span class="sy1">></span><span class="br0">(</span>rhs<span class="br0">)</span> <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">></span> same_as<span class="sy1"><</span>LHS<span class="sy1">></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_swappable">概念 <a href="cpp-concepts-swappable.html"><code>swappable</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept swappable <span class="sy1">=</span> requires<span class="br0">(</span>T<span class="sy3">&</span> a, T<span class="sy3">&</span> b<span class="br0">)</span> <span class="br0">{</span> ranges<span class="sy4">::</span><span class="me2">swap</span><span class="br0">(</span>a, b<span class="br0">)</span><span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_swappable_with">概念 <a href="cpp-concepts-swappable.html"><code>swappable_with</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> U<span class="sy1">></span>
|
|
concept swappable_with <span class="sy1">=</span>
|
|
common_reference_with<span class="sy1"><</span><span class="kw4">const</span> remove_reference_t<span class="sy1"><</span>T<span class="sy1">></span><span class="sy3">&</span>, <span class="kw4">const</span> remove_reference_t<span class="sy1"><</span>U<span class="sy1">></span><span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span>
|
|
requires<span class="br0">(</span>T<span class="sy3">&&</span> t, U<span class="sy3">&&</span> u<span class="br0">)</span> <span class="br0">{</span>
|
|
ranges<span class="sy4">::</span><span class="me2">swap</span><span class="br0">(</span><a href="cpp-utility-forward.html"><span class="kw1117">std::<span class="me2">forward</span></span></a><span class="sy1"><</span>T<span class="sy1">></span><span class="br0">(</span>t<span class="br0">)</span>, <a href="cpp-utility-forward.html"><span class="kw1117">std::<span class="me2">forward</span></span></a><span class="sy1"><</span>T<span class="sy1">></span><span class="br0">(</span>t<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
|
|
ranges<span class="sy4">::</span><span class="me2">swap</span><span class="br0">(</span><a href="cpp-utility-forward.html"><span class="kw1117">std::<span class="me2">forward</span></span></a><span class="sy1"><</span>U<span class="sy1">></span><span class="br0">(</span>u<span class="br0">)</span>, <a href="cpp-utility-forward.html"><span class="kw1117">std::<span class="me2">forward</span></span></a><span class="sy1"><</span>U<span class="sy1">></span><span class="br0">(</span>u<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
|
|
ranges<span class="sy4">::</span><span class="me2">swap</span><span class="br0">(</span><a href="cpp-utility-forward.html"><span class="kw1117">std::<span class="me2">forward</span></span></a><span class="sy1"><</span>T<span class="sy1">></span><span class="br0">(</span>t<span class="br0">)</span>, <a href="cpp-utility-forward.html"><span class="kw1117">std::<span class="me2">forward</span></span></a><span class="sy1"><</span>U<span class="sy1">></span><span class="br0">(</span>u<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
|
|
ranges<span class="sy4">::</span><span class="me2">swap</span><span class="br0">(</span><a href="cpp-utility-forward.html"><span class="kw1117">std::<span class="me2">forward</span></span></a><span class="sy1"><</span>U<span class="sy1">></span><span class="br0">(</span>u<span class="br0">)</span>, <a href="cpp-utility-forward.html"><span class="kw1117">std::<span class="me2">forward</span></span></a><span class="sy1"><</span>T<span class="sy1">></span><span class="br0">(</span>t<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_destructible">概念 <a href="cpp-concepts-destructible.html"><code>destructible</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept destructible <span class="sy1">=</span> is_nothrow_destructible_v<span class="sy1"><</span>T<span class="sy1">></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_constructible_from">概念 <a href="cpp-concepts-constructible_from.html"><code>constructible_from</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span>... <span class="me1">Args</span><span class="sy1">></span>
|
|
concept constructible_from <span class="sy1">=</span> destructible<span class="sy1"><</span>T<span class="sy1">></span> <span class="sy3">&&</span> is_constructible_v<span class="sy1"><</span>T, Args...<span class="sy1">></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_default_initializable">概念 <a href="cpp-concepts-default_initializable.html"><code>default_initializable</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
<span class="kw1">inline</span> <span class="kw4">constexpr</span> <span class="kw4">bool</span> __is_default_initializable <span class="sy1">=</span> <span class="coMULTI">/* 见描述 */</span><span class="sy4">;</span> <span class="co1">// 仅用于阐释</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept default_initializable <span class="sy1">=</span> constructible_from<span class="sy1"><</span>T<span class="sy1">></span> <span class="sy3">&&</span>
|
|
requires<span class="br0">{</span> T<span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span> <span class="br0">}</span> <span class="sy3">&&</span>
|
|
__is_default_initializable<span class="sy1"><</span>T<span class="sy1">></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_move_constructible">概念 <a href="cpp-concepts-move_constructible.html"><code>move_constructible</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept move_constructible <span class="sy1">=</span> constructible_from<span class="sy1"><</span>T, T<span class="sy1">></span> <span class="sy3">&&</span> convertible_to<span class="sy1"><</span>T, T<span class="sy1">></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_copy_constructible">概念 <a href="cpp-concepts-copy_constructible.html"><code>copy_constructible</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept copy_constructible <span class="sy1">=</span>
|
|
move_constructible<span class="sy1"><</span>T<span class="sy1">></span> <span class="sy3">&&</span>
|
|
constructible_from<span class="sy1"><</span>T, T<span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span> convertible_to<span class="sy1"><</span>T<span class="sy3">&</span>, T<span class="sy1">></span> <span class="sy3">&&</span>
|
|
constructible_from<span class="sy1"><</span>T, <span class="kw4">const</span> T<span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span> convertible_to<span class="sy1"><</span><span class="kw4">const</span> T<span class="sy3">&</span>, T<span class="sy1">></span> <span class="sy3">&&</span>
|
|
constructible_from<span class="sy1"><</span>T, <span class="kw4">const</span> T<span class="sy1">></span> <span class="sy3">&&</span> convertible_to<span class="sy1"><</span><span class="kw4">const</span> T, T<span class="sy1">></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_equality_comparable">概念 <a href="cpp-concepts-equality_comparable.html"><code>equality_comparable</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> U<span class="sy1">></span>
|
|
concept __WeaklyEqualityComparableWith <span class="sy1">=</span> <span class="co1">// 仅为阐释</span>
|
|
requires<span class="br0">(</span><span class="kw4">const</span> remove_reference_t<span class="sy1"><</span>T<span class="sy1">></span><span class="sy3">&</span> t,
|
|
<span class="kw4">const</span> remove_reference_t<span class="sy1"><</span>U<span class="sy1">></span><span class="sy3">&</span> u<span class="br0">)</span> <span class="br0">{</span>
|
|
<span class="br0">{</span> t <span class="sy1">==</span> u <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">></span> boolean<span class="sy2">-</span>testable<span class="sy4">;</span>
|
|
<span class="br0">{</span> t <span class="sy3">!</span><span class="sy1">=</span> u <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">></span> boolean<span class="sy2">-</span>testable<span class="sy4">;</span>
|
|
<span class="br0">{</span> u <span class="sy1">==</span> t <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">></span> boolean<span class="sy2">-</span>testable<span class="sy4">;</span>
|
|
<span class="br0">{</span> u <span class="sy3">!</span><span class="sy1">=</span> t <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">></span> boolean<span class="sy2">-</span>testable<span class="sy4">;</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept equality_comparable <span class="sy1">=</span> __WeaklyEqualityComparableWith<span class="sy1"><</span>T, T<span class="sy1">></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_equality_comparable_with">概念 <a href="cpp-concepts-equality_comparable.html"><code>equality_comparable_with</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> U<span class="sy1">></span>
|
|
concept equality_comparable_with <span class="sy1">=</span>
|
|
equality_comparable<span class="sy1"><</span>T<span class="sy1">></span> <span class="sy3">&&</span> equality_comparable<span class="sy1"><</span>U<span class="sy1">></span> <span class="sy3">&&</span>
|
|
common_reference_with<span class="sy1"><</span><span class="kw4">const</span> remove_reference_t<span class="sy1"><</span>T<span class="sy1">></span><span class="sy3">&</span>, <span class="kw4">const</span> remove_reference_t<span class="sy1"><</span>U<span class="sy1">></span><span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span>
|
|
equality_comparable<span class="sy1"><</span>
|
|
common_reference_t<span class="sy1"><</span>
|
|
<span class="kw4">const</span> remove_reference_t<span class="sy1"><</span>T<span class="sy1">></span><span class="sy3">&</span>,
|
|
<span class="kw4">const</span> remove_reference_t<span class="sy1"><</span>U<span class="sy1">></span><span class="sy3">&</span><span class="sy1">>></span> <span class="sy3">&&</span>
|
|
__WeaklyEqualityComparableWith<span class="sy1"><</span>T, U<span class="sy1">></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_totally_ordered">概念 <a href="cpp-concepts-totally_ordered.html"><code>totally_ordered</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept totally_ordered <span class="sy1">=</span>
|
|
equality_comparable<span class="sy1"><</span>T<span class="sy1">></span> <span class="sy3">&&</span>
|
|
requires<span class="br0">(</span><span class="kw4">const</span> remove_reference_t<span class="sy1"><</span>T<span class="sy1">></span><span class="sy3">&</span> a,
|
|
<span class="kw4">const</span> remove_reference_t<span class="sy1"><</span>T<span class="sy1">></span><span class="sy3">&</span> b<span class="br0">)</span> <span class="br0">{</span>
|
|
<span class="br0">{</span> a <span class="sy1"><</span> b <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">></span> boolean<span class="sy2">-</span>testable<span class="sy4">;</span>
|
|
<span class="br0">{</span> a <span class="sy1">></span> b <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">></span> boolean<span class="sy2">-</span>testable<span class="sy4">;</span>
|
|
<span class="br0">{</span> a <span class="sy1"><=</span> b <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">></span> boolean<span class="sy2">-</span>testable<span class="sy4">;</span>
|
|
<span class="br0">{</span> a <span class="sy1">>=</span> b <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">></span> boolean<span class="sy2">-</span>testable<span class="sy4">;</span>
|
|
<span class="br0">}</span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_totally_ordered_with">概念 <a href="cpp-concepts-totally_ordered.html"><code>totally_ordered_with</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T, <span class="kw1">class</span> U<span class="sy1">></span>
|
|
concept totally_ordered_with <span class="sy1">=</span>
|
|
totally_ordered<span class="sy1"><</span>T<span class="sy1">></span> <span class="sy3">&&</span> totally_ordered<span class="sy1"><</span>U<span class="sy1">></span> <span class="sy3">&&</span>
|
|
common_reference_with<span class="sy1"><</span><span class="kw4">const</span> remove_reference_t<span class="sy1"><</span>T<span class="sy1">></span><span class="sy3">&</span>, <span class="kw4">const</span> remove_reference_t<span class="sy1"><</span>U<span class="sy1">></span><span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span>
|
|
totally_ordered<span class="sy1"><</span>
|
|
common_reference_t<span class="sy1"><</span>
|
|
<span class="kw4">const</span> remove_reference_t<span class="sy1"><</span>T<span class="sy1">></span><span class="sy3">&</span>,
|
|
<span class="kw4">const</span> remove_reference_t<span class="sy1"><</span>U<span class="sy1">></span><span class="sy3">&</span><span class="sy1">>></span> <span class="sy3">&&</span>
|
|
equality_comparable_with<span class="sy1"><</span>T, U<span class="sy1">></span> <span class="sy3">&&</span>
|
|
requires<span class="br0">(</span><span class="kw4">const</span> remove_reference_t<span class="sy1"><</span>T<span class="sy1">></span><span class="sy3">&</span> t,
|
|
<span class="kw4">const</span> remove_reference_t<span class="sy1"><</span>U<span class="sy1">></span><span class="sy3">&</span> u<span class="br0">)</span> <span class="br0">{</span>
|
|
<span class="br0">{</span> t <span class="sy1"><</span> u <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">></span> boolean<span class="sy2">-</span>testable<span class="sy4">;</span>
|
|
<span class="br0">{</span> t <span class="sy1">></span> u <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">></span> boolean<span class="sy2">-</span>testable<span class="sy4">;</span>
|
|
<span class="br0">{</span> t <span class="sy1"><=</span> u <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">></span> boolean<span class="sy2">-</span>testable<span class="sy4">;</span>
|
|
<span class="br0">{</span> t <span class="sy1">>=</span> u <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">></span> boolean<span class="sy2">-</span>testable<span class="sy4">;</span>
|
|
<span class="br0">{</span> u <span class="sy1"><</span> t <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">></span> boolean<span class="sy2">-</span>testable<span class="sy4">;</span>
|
|
<span class="br0">{</span> u <span class="sy1">></span> t <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">></span> boolean<span class="sy2">-</span>testable<span class="sy4">;</span>
|
|
<span class="br0">{</span> u <span class="sy1"><=</span> t <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">></span> boolean<span class="sy2">-</span>testable<span class="sy4">;</span>
|
|
<span class="br0">{</span> u <span class="sy1">>=</span> t <span class="br0">}</span> <span class="sy2">-</span><span class="sy1">></span> boolean<span class="sy2">-</span>testable<span class="sy4">;</span>
|
|
<span class="br0">}</span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_movable">概念 <a href="cpp-concepts-movable.html"><code>movable</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept movable <span class="sy1">=</span> is_object_v<span class="sy1"><</span>T<span class="sy1">></span> <span class="sy3">&&</span> move_constructible<span class="sy1"><</span>T<span class="sy1">></span> <span class="sy3">&&</span>
|
|
assignable_from<span class="sy1"><</span>T<span class="sy3">&</span>, T<span class="sy1">></span> <span class="sy3">&&</span> swappable<span class="sy1"><</span>T<span class="sy1">></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_copyable">概念 <a href="cpp-concepts-copyable.html"><code>copyable</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept copyable <span class="sy1">=</span> copy_constructible<span class="sy1"><</span>T<span class="sy1">></span> <span class="sy3">&&</span> movable<span class="sy1"><</span>T<span class="sy1">></span> <span class="sy3">&&</span> assignable_from<span class="sy1"><</span>T<span class="sy3">&</span>, T<span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span>
|
|
assignable_from<span class="sy1"><</span>T<span class="sy3">&</span>, <span class="kw4">const</span> T<span class="sy3">&</span><span class="sy1">></span> <span class="sy3">&&</span> assignable_from<span class="sy1"><</span>T<span class="sy3">&</span>, <span class="kw4">const</span> T<span class="sy1">></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_semiregular">概念 <a href="cpp-concepts-semiregular.html"><code>semiregular</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept semiregular <span class="sy1">=</span> copyable<span class="sy1"><</span>T<span class="sy1">></span> <span class="sy3">&&</span> default_initializable<span class="sy1"><</span>T<span class="sy1">></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_regular">概念 <a href="cpp-concepts-regular.html"><code>regular</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> T<span class="sy1">></span>
|
|
concept regular <span class="sy1">=</span> semiregular<span class="sy1"><</span>T<span class="sy1">></span> <span class="sy3">&&</span> equality_comparable<span class="sy1"><</span>T<span class="sy1">></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_invocable">概念 <a href="cpp-concepts-invocable.html"><code>invocable</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> F, <span class="kw1">class</span>... <span class="me1">Args</span><span class="sy1">></span>
|
|
concept invocable <span class="sy1">=</span> requires<span class="br0">(</span>F<span class="sy3">&&</span> f, Args<span class="sy3">&&</span>... <span class="me1">args</span><span class="br0">)</span> <span class="br0">{</span>
|
|
invoke<span class="br0">(</span><a href="cpp-utility-forward.html"><span class="kw1117">std::<span class="me2">forward</span></span></a><span class="sy1"><</span>F<span class="sy1">></span><span class="br0">(</span>f<span class="br0">)</span>, <a href="cpp-utility-forward.html"><span class="kw1117">std::<span class="me2">forward</span></span></a><span class="sy1"><</span>Args<span class="sy1">></span><span class="br0">(</span>args<span class="br0">)</span>...<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="co1">// 不要求保持相等性</span>
|
|
<span class="br0">}</span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_regular_invocable">概念 <a href="cpp-concepts-invocable.html"><code>regular_invocable</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> F, <span class="kw1">class</span>... <span class="me1">Args</span><span class="sy1">></span>
|
|
concept regular_invocable <span class="sy1">=</span> invocable<span class="sy1"><</span>F, Args...<span class="sy1">></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_predicate">概念 <a href="cpp-concepts-predicate.html"><code>predicate</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> F, <span class="kw1">class</span>... <span class="me1">Args</span><span class="sy1">></span>
|
|
concept predicate <span class="sy1">=</span>
|
|
regular_invocable<span class="sy1"><</span>F, Args...<span class="sy1">></span> <span class="sy3">&&</span> boolean<span class="sy2">-</span>testable<span class="sy1"><</span>invoke_result_t<span class="sy1"><</span>F, Args...<span class="sy1">>></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_relation">概念 <a href="cpp-concepts-relation.html"><code>relation</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> R, <span class="kw1">class</span> T, <span class="kw1">class</span> U<span class="sy1">></span>
|
|
concept relation <span class="sy1">=</span>
|
|
predicate<span class="sy1"><</span>R, T, T<span class="sy1">></span> <span class="sy3">&&</span> predicate<span class="sy1"><</span>R, U, U<span class="sy1">></span> <span class="sy3">&&</span>
|
|
predicate<span class="sy1"><</span>R, T, U<span class="sy1">></span> <span class="sy3">&&</span> predicate<span class="sy1"><</span>R, U, T<span class="sy1">></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_equivalence_relation">概念 <a href="cpp-concepts-equivalence_relation.html"><code>equivalence_relation</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> R, <span class="kw1">class</span> T, <span class="kw1">class</span> U<span class="sy1">></span>
|
|
concept equivalence_relation <span class="sy1">=</span> relation<span class="sy1"><</span>R, T, U<span class="sy1">></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E6.A6.82.E5.BF.B5_strict_weak_order">概念 <a href="cpp-concepts-strict_weak_order.html"><code>strict_weak_order</code></a></span></h4>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw1">template</span><span class="sy1"><</span><span class="kw1">class</span> R, <span class="kw1">class</span> T, <span class="kw1">class</span> U<span class="sy1">></span>
|
|
concept strict_weak_order <span class="sy1">=</span> relation<span class="sy1"><</span>R, T, U<span class="sy1">></span><span class="sy4">;</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|