2141 lines
170 KiB
HTML
2141 lines
170 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>功能特性测试 (C++20)</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_feature_test skin-cppreference2 action-view cpp-navbar">
|
|
<div id="cpp-content-base">
|
|
<div id="content"><a id="top"></a>
|
|
<h1 id="firstHeading" class="firstHeading">功能特性测试 <span class="t-mark-rev t-since-cxx20">(C++20)</span></h1>
|
|
<div id="bodyContent">
|
|
<div id="contentSub"><span class="subpages">< <a href="cpp.html">cpp</a></span></div>
|
|
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
|
|
<p>标准中为 C++11 和其后所引入的 C++ 语言和程序库的功能特性定义了一组<a href="cpp-preprocessor-replace.html">预处理器宏</a>。标准有意使之成为检测这些功能特性是否存在的一种简单且可移植的方式。</p>
|
|
<h3><span class="mw-headline" id=".E5.B1.9E.E6.80.A7">属性</span></h3>
|
|
<table class="t-sdsc-begin">
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
<tr class="t-sdsc">
|
|
<td class="t-sdsc-nopad"><code><b>__has_cpp_attribute(</b></code> <span class="t-spar">属性记号</span> <code><b>)</b></code></td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
<td class="t-sdsc-nopad"></td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="10" class="t-sdsc-sep"></td>
|
|
</tr>
|
|
</table>
|
|
<p>检查(宏展开后) <span class="t-spar">属性记号</span> 所指名的<a href="cpp-language-attributes.html">属性</a>的存在。</p>
|
|
<p>对于标准属性,它将展开成该属性被添加到工作草案中时的年份和月份(见下表),特定于厂商的属性则以某个非零值确定。</p>
|
|
<p>能在 <a href="cpp-preprocessor-conditional.html"><tt>#if</tt></a> 与 <a href="cpp-preprocessor-conditional.html"><tt>#elif</tt></a> 的表达式中展开 <code>__has_cpp_attribute</code> 。 <a href="cpp-preprocessor-conditional.html"><tt>#ifdef</tt></a> 、 <a href="cpp-preprocessor-conditional.html"><tt>#ifndef</tt></a> 和 <a href="cpp-preprocessor-conditional.html"><tt>defined</tt></a> 把它当做已定义的宏,但不能在别处使用它。</p>
|
|
<table class="wikitable sortable">
|
|
<tr>
|
|
<th><span class="t-spar">属性记号</span></th>
|
|
<th>属性</th>
|
|
<th>值</th>
|
|
<th><abbr title="引入该特性的标准">标准</abbr></th>
|
|
</tr>
|
|
<tr>
|
|
<td><code>carries_dependency</code></td>
|
|
<td><code>[[<a href="cpp-language-attributes-carries_dependency.html">carries_dependency</a>]]</code></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200809L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>deprecated</code></td>
|
|
<td><code>[[<a href="cpp-language-attributes-deprecated.html">deprecated</a>]]</code></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201309L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>fallthrough</code></td>
|
|
<td><code>[[<a href="cpp-language-attributes-fallthrough.html">fallthrough</a>]]</code></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>likely</code></td>
|
|
<td><code>[[<a href="cpp-language-attributes-likely.html">likely</a>]]</code></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201803L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>maybe_unused</code></td>
|
|
<td><code>[[<a href="cpp-language-attributes-maybe_unused.html">maybe_unused</a>]]</code></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>no_unique_address</code></td>
|
|
<td><code>[[<a href="cpp-language-attributes-no_unique_address.html">no_unique_address</a>]]</code></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201803L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="2"><code>nodiscard</code></td>
|
|
<td rowspan="2"><code>[[<a href="cpp-language-attributes-nodiscard.html">nodiscard</a>]]</code></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>noreturn</code></td>
|
|
<td><code>[[<a href="cpp-language-attributes-noreturn.html">noreturn</a>]]</code></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200809L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>unlikely</code></td>
|
|
<td><code>[[<a href="cpp-language-attributes-likely.html">unlikely</a>]]</code></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201803L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E8.AF.AD.E8.A8.80.E5.8A.9F.E8.83.BD.E7.89.B9.E6.80.A7">语言功能特性</span></h3>
|
|
<p>下列宏预定义于每个翻译单元。每个宏都展开成对应于相应功能特性被包含到工作草案时的年份与月份的整数字面量。</p>
|
|
<p>当功能特性发生了显著变更时,宏会相应地更新。</p>
|
|
<div class="t-template-editlink" style=""></div>
|
|
<table class="wikitable sortable">
|
|
<tr>
|
|
<th>宏名</th>
|
|
<th>功能特性</th>
|
|
<th>值</th>
|
|
<th><abbr title="引入该特性的标准">标准</abbr></th>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_aggregate_bases</span></span></td>
|
|
<td>拥有基类的<a href="cpp-language-aggregate_initialization.html">聚合类</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_aggregate_nsdmi</span></span></td>
|
|
<td>拥有<a href="cpp-language-data_members.html#.E6.88.90.E5.91.98.E5.88.9D.E5.A7.8B.E5.8C.96">默认成员初始化器</a>的<a href="cpp-language-aggregate_initialization.html">聚合类</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_aggregate_paren_init</span></span></td>
|
|
<td>形式为<a href="cpp-language-direct_initialization.html">直接初始化</a>的<a href="cpp-language-aggregate_initialization.html">聚合初始化</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201902L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_alias_templates</span></span></td>
|
|
<td><a href="cpp-language-type_alias.html">别名模版</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200704L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_aligned_new</span></span></td>
|
|
<td><a href="cpp-memory-new-align_val_t.html">过对齐数据的动态内存分配</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_attributes</span></span></td>
|
|
<td><a href="cpp-language-attributes.html">属性</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200809L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_binary_literals</span></span></td>
|
|
<td><a href="cpp-language-integer_literal.html">二进制字面量</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_capture_star_this</span></span></td>
|
|
<td><a href="cpp-language-lambda.html#Lambda_.E6.8D.95.E8.8E.B7">以 <code>[=,*this]</code> 进行 <code>*this</code> 的按值 lambda 捕获</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_char8_t</span></span></td>
|
|
<td><a href="cpp-keyword-char8_t.html"><tt>char8_t</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_concepts</span></span></td>
|
|
<td><a href="cpp-language-constraints.html">概念</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_conditional_explicit</span></span></td>
|
|
<td><a href="cpp-language-explicit.html"><tt>explicit(bool)</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201806L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_consteval</span></span></td>
|
|
<td><a href="cpp-language-consteval.html">立即函数</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="5"><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_constexpr</span></span></td>
|
|
<td><a href="cpp-language-constexpr.html"><tt>constexpr</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200704L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><a href="cpp-language-constexpr.html#relaxed-constexpr">放松 constexpr 函数上的限制</a>和及非 <code>const</code> 的 constexpr 非静态成员函数</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><a href="cpp-language-lambda.html">Constexpr lambda</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>constexpr 函数中的平凡<a href="cpp-language-default_initialization.html">默认初始化</a>与<a href="cpp-language-asm.html">汇编声明</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>constexpr 函数中的非<a href="cpp-named_req-LiteralType.html">字面</a>变量、标签及 <a href="cpp-language-goto.html"><tt>goto</tt></a> 语句</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202110L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_constexpr_dynamic_alloc</span></span></td>
|
|
<td>constexpr 函数中的动态存储期操作</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_constexpr_in_decltype</span></span></td>
|
|
<td>在为<a href="cpp-language-constant_expression.html#.E5.B8.B8.E9.87.8F.E6.B1.82.E5.80.BC.E6.89.80.E9.9C.80.E8.A6.81.E7.9A.84.E5.87.BD.E6.95.B0.E4.B8.8E.E5.8F.98.E9.87.8F">常量求值所需要</a>时生成函数和变量的定义</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201711L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_constinit</span></span></td>
|
|
<td><a href="cpp-language-constinit.html"><tt>constinit</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_coroutines</span></span></td>
|
|
<td>协程</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201902L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_decltype</span></span></td>
|
|
<td><a href="cpp-language-decltype.html"><tt>decltype</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200707L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_decltype_auto</span></span></td>
|
|
<td><a href="cpp-language-auto.html">常规函数的返回类型推导</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="2"><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_deduction_guides</span></span></td>
|
|
<td><a href="cpp-language-class_template_argument_deduction.html">类模板的模板实参推导</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201703L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><a href="cpp-language-class_template_argument_deduction.html">聚合体与别名的 <abbr title="类模板实参推导">CTAD</abbr></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_delegating_constructors</span></span></td>
|
|
<td><a href="cpp-language-initializer_list.html#.E5.A7.94.E6.89.98.E6.9E.84.E9.80.A0.E5.87.BD.E6.95.B0" class="mw-redirect">委托构造函数</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200604L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_designated_initializers</span></span></td>
|
|
<td><a href="cpp-language-aggregate_initialization.html#.E6.8C.87.E6.B4.BE.E5.88.9D.E5.A7.8B.E5.8C.96.E5.99.A8">指派初始化器</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201707L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_enumerator_attributes</span></span></td>
|
|
<td><a href="cpp-language-enum.html">枚举项</a>的属性</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201411L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_explicit_this_parameter</span></span></td>
|
|
<td>显式对象形参</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202110L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_fold_expressions</span></span></td>
|
|
<td><a href="cpp-language-fold.html">折叠表达式</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="2"><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_generic_lambdas</span></span></td>
|
|
<td><a href="cpp-language-lambda.html">泛型 lambda 表达式</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><a href="cpp-language-lambda.html">泛型 lambda</a> 的显式模板形参列表</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201707L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_guaranteed_copy_elision</span></span></td>
|
|
<td>通过简化<a href="cpp-language-value_category.html">值类别</a>保证复制消除</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_hex_float</span></span></td>
|
|
<td><a href="cpp-language-floating_literal.html">十六进制浮点字面量</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_if_consteval</span></span></td>
|
|
<td><a href="cpp-language-if.html"><code>consteval if</code></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202106L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_if_constexpr</span></span></td>
|
|
<td><a href="cpp-language-if.html"><code>constexpr if</code></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_impl_coroutine</span></span></td>
|
|
<td><a href="cpp-language-coroutines.html">协程</a>(编译器支持)</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201902L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_impl_destroying_delete</span></span></td>
|
|
<td><a href="cpp-memory-new-operator_delete.html">销毁的 <code>operator delete</code></a> (编译器支持)</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201806L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_impl_three_way_comparison</span></span></td>
|
|
<td><a href="cpp-language-operator_comparison.html#.E4.B8.89.E8.B7.AF.E6.AF.94.E8.BE.83">三路比较</a>(编译器支持)</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="2"><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_inheriting_constructors</span></span></td>
|
|
<td><a href="cpp-language-using_declaration.html#.E7.BB.A7.E6.89.BF.E6.9E.84.E9.80.A0.E5.87.BD.E6.95.B0">继承构造函数</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200802L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>重述继承构造函数</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201511L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="2"><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_init_captures</span></span></td>
|
|
<td><a href="cpp-language-lambda.html">Lambda 初始化捕获</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><a href="cpp-language-lambda.html">Lambda</a> 初始化捕获中的包展开</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201803L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_initializer_lists</span></span></td>
|
|
<td><a href="cpp-language-list_initialization.html">列表初始化</a>与 <span class="t-lc"><a href="cpp-utility-initializer_list.html">std::initializer_list</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200806L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_inline_variables</span></span></td>
|
|
<td><a href="cpp-language-inline.html">inline 变量</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lambdas</span></span></td>
|
|
<td><a href="cpp-language-lambda.html">Lambda 表达式</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200907L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_modules</span></span></td>
|
|
<td><a href="cpp-language-modules.html">模块</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_multidimensional_subscript</span></span></td>
|
|
<td>多维<a href="cpp-language-operator_member_access.html">下标运算符</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202110L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_namespace_attributes</span></span></td>
|
|
<td><a href="cpp-language-namespace.html">命名空间</a>的属性</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201411L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_noexcept_function_type</span></span></td>
|
|
<td>令<a href="cpp-language-noexcept_spec.html">异常规定</a>为类型系统的一部分</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201510L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="2"><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_nontype_template_args</span></span></td>
|
|
<td>允许全部<a href="cpp-language-template_parameters.html#.E9.9D.9E.E7.B1.BB.E5.9E.8B.E6.A8.A1.E6.9D.BF.E5.AE.9E.E5.8F.82">非类型模板实参</a>的常量求值</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201411L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><a href="cpp-language-template_parameters.html#.E9.9D.9E.E7.B1.BB.E5.9E.8B.E6.A8.A1.E6.9D.BF.E5.BD.A2.E5.8F.82">非类型模板形参</a>中的类类型与浮点类型</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201911L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_nontype_template_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">parameter_auto</span></span></td>
|
|
<td>以 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">auto</span></span></span> 声明<a href="cpp-language-template_parameters.html#.E9.9D.9E.E7.B1.BB.E5.9E.8B.E6.A8.A1.E6.9D.BF.E5.BD.A2.E5.8F.82">非类型模板形参</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_nsdmi</span></span></td>
|
|
<td><a href="cpp-language-data_members.html#.E6.88.90.E5.91.98.E5.88.9D.E5.A7.8B.E5.8C.96">非静态数据成员初始化器</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200809L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="2"><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_range_based_for</span></span></td>
|
|
<td><a href="cpp-language-range-for.html">基于范围的 for 循环</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200907L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>拥有相异的 <code>begin</code>/<code>end</code> 类型的基于范围的 <code>for</code> 循环</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_raw_strings</span></span></td>
|
|
<td><a href="cpp-language-string_literal.html">原始字符串字面量</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200710L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_ref_qualifiers</span></span></td>
|
|
<td><a href="cpp-language-member_functions.html">引用限定符</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200710L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_return_type_deduction</span></span></td>
|
|
<td><a href="cpp-language-auto.html">常规函数的返回类型推导</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_rvalue_references</span></span></td>
|
|
<td><a href="cpp-language-reference.html">右值引用</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200610L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_size_t_suffix</span></span></td>
|
|
<td><a href="cpp-language-integer_literal.html"><code>size_t</code> 与其有符号版本的字面量后缀</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202011L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_sized_deallocation</span></span></td>
|
|
<td><a href="cpp-memory-new-operator_delete.html">具大小解分配</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201309L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="2"><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_static_assert</span></span></td>
|
|
<td><a href="cpp-language-static_assert.html"><tt>static_assert</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200410L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><a href="cpp-language-static_assert.html">单参数的 <code>static_assert</code></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201411L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_structured_bindings</span></span></td>
|
|
<td><a href="cpp-language-structured_binding.html">结构化绑定</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_template_template_args</span></span></td>
|
|
<td><a href="cpp-language-template_parameters.html#.E6.A8.A1.E6.9D.BF.E6.A8.A1.E6.9D.BF.E5.AE.9E.E5.8F.82">模板模板实参</a>的匹配</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201611L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_threadsafe_static_init</span></span></td>
|
|
<td><a href="cpp-language-storage_duration.html#.E9.9D.99.E6.80.81.E5.B1.80.E9.83.A8.E5.8F.98.E9.87.8F">带并发的动态初始化和销毁</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200806L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_unicode_characters</span></span></td>
|
|
<td><a href="cpp-language-types.html">新字符类型</a>( <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">char16_t</span></span></span> 与 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">char32_t</span></span></span> )</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200704L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_unicode_literals</span></span></td>
|
|
<td><a href="cpp-language-string_literal.html">Unicode 字符串字面量</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200710L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_user_defined_literals</span></span></td>
|
|
<td><a href="cpp-language-user_literal.html">用户定义字面量</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200809L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_using_enum</span></span></td>
|
|
<td>using enum</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_variable_templates</span></span></td>
|
|
<td><a href="cpp-language-variable_template.html">变量模板</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_variadic_templates</span></span></td>
|
|
<td><a href="cpp-language-parameter_pack.html">变参模板</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200704L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_variadic_using</span></span></td>
|
|
<td><a href="cpp-language-using_declaration.html">using 声明</a>中的包展开</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201611L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E6.A0.87.E5.87.86.E5.BA.93.E5.8A.9F.E8.83.BD.E7.89.B9.E6.80.A7">标准库功能特性</span></h3>
|
|
<p>如果包含了头文件 <a href="cpp-header-version.html"><tt><version></tt></a> 或下表中的任意对应头文件,则下列各个宏有定义。每个宏都展开成其对应的功能特性被包含于工作草案时的年份与月份的相应整数字面量。</p>
|
|
<p>当功能特性发生了显著变更时,宏会相应地更新。</p>
|
|
<div class="t-template-editlink" style=""></div>
|
|
<table class="wikitable sortable">
|
|
<tr>
|
|
<th>宏名</th>
|
|
<th>功能特性</th>
|
|
<th>值</th>
|
|
<th>头文件</th>
|
|
<th><span title="引入该特性的标准">标准</span></th>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_adaptor_iterator_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">pair_constructor</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-container-stack.html">std::stack</a></span> 与 <span class="t-lc"><a href="cpp-container-queue.html">std::queue</a></span> 的迭代器对构造函数</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202106L</span></span></span></td>
|
|
<td><a href="cpp-header-stack.html"><tt><stack></tt></a> <a href="cpp-header-queue.html"><tt><queue></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_addressof_constexpr</span></span></td>
|
|
<td>constexpr <span class="t-lc"><a href="cpp-memory-addressof.html">std::addressof</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><a href="cpp-header-memory.html"><tt><memory></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_allocate_at_least</span></span></td>
|
|
<td><span class="t-lc">std::allocate_at_least</span> 等</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202106L</span></span></span></td>
|
|
<td><a href="cpp-header-memory.html"><tt><memory></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_allocator_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">traits_is_always_equal</span></span></td>
|
|
<td><a href="cpp-memory-allocator_traits.html"><tt>std::allocator_traits::is_always_equal</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201411L</span></span></span></td>
|
|
<td><a href="cpp-header-memory.html"><tt><memory></tt></a> <a href="cpp-header-scoped_allocator.html"><tt><scoped_allocator></tt></a> <a href="cpp-header-string.html"><tt><string></tt></a> <a href="cpp-header-deque.html"><tt><deque></tt></a> <a href="cpp-header-forward_list.html"><tt><forward_list></tt></a> <a href="cpp-header-list.html"><tt><list></tt></a> <a href="cpp-header-vector.html"><tt><vector></tt></a> <a href="cpp-header-map.html"><tt><map></tt></a> <a href="cpp-header-set.html"><tt><set></tt></a> <a href="cpp-header-unordered_map.html"><tt><unordered_map></tt></a> <a href="cpp-header-unordered_set.html"><tt><unordered_set></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_any</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-utility-any.html">std::any</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span></td>
|
|
<td><a href="cpp-header-any.html"><tt><any></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_apply</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-utility-apply.html">std::apply</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><a href="cpp-header-tuple.html"><tt><tuple></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="2"><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_array_constexpr</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-iterator-reverse_iterator.html">std::reverse_iterator</a></span> 、 <span class="t-lc"><a href="cpp-iterator-move_iterator.html">std::move_iterator</a></span> 、 <span class="t-lc"><a href="cpp-container-array.html">std::array</a></span> 及<a href="cpp-iterator.html#.E8.8C.83.E5.9B.B4.E8.AE.BF.E9.97.AE">范围访问</a>的 constexpr</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><a href="cpp-header-iterator.html"><tt><iterator></tt></a> <a href="cpp-header-array.html"><tt><array></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><a href="cpp-named_req-ConstexprIterator.html"><span style="font-style:italic">常量表达式迭代器</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(ConstexprIterator)</span></a> ; <span class="t-lc"><a href="cpp-container-array.html">std::array</a></span> 的 constexpr 比较;杂项 constexpr ( <span class="t-lc"><a href="cpp-container-array-fill.html">std::array::fill</a></span> 等)</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span></td>
|
|
<td><a href="cpp-header-iterator.html"><tt><iterator></tt></a> <a href="cpp-header-array.html"><tt><array></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_as_const</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-utility-as_const.html">std::as_const</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201510L</span></span></span></td>
|
|
<td><a href="cpp-header-utility.html"><tt><utility></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_associative_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">heterogeneous_erasure</span></span></td>
|
|
<td><a href="cpp-container.html#.E5.85.B3.E8.81.94.E5.AE.B9.E5.99.A8">关联容器</a>与<a href="cpp-container.html#.E6.97.A0.E5.BA.8F.E5.85.B3.E8.81.94.E5.AE.B9.E5.99.A8">无序关联容器</a>中的异质擦除</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202110L</span></span></span></td>
|
|
<td><a href="cpp-header-map.html"><tt><map></tt></a> <a href="cpp-header-set.html"><tt><set></tt></a> <a href="cpp-header-unordered_map.html"><tt><unordered_map></tt></a> <a href="cpp-header-unordered_set.html"><tt><unordered_set></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_assume_aligned</span></span></td>
|
|
<td><span class="t-lc">std::assume_aligned</span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span></td>
|
|
<td><a href="cpp-header-memory.html"><tt><memory></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_atomic_flag_test</span></span></td>
|
|
<td><span class="t-lc">std::atomic_flag::test</span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><a href="cpp-header-atomic.html"><tt><atomic></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_atomic_float</span></span></td>
|
|
<td><a href="cpp-atomic-atomic.html">浮点原子类型</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201711L</span></span></span></td>
|
|
<td><a href="cpp-header-atomic.html"><tt><atomic></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_atomic_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">is_always_lock_free</span></span></td>
|
|
<td><a href="cpp-atomic-atomic-is_always_lock_free.html"><tt>constexpr atomic<T>::is_always_lock_free</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><a href="cpp-header-atomic.html"><tt><atomic></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_atomic_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">lock_free_type_aliases</span></span></td>
|
|
<td>原子免锁整数类型( <span class="t-lc">std::atomic_signed_lock_free</span> 、 <span class="t-lc">std::atomic_unsigned_lock_free</span> )</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><a href="cpp-header-atomic.html"><tt><atomic></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_atomic_ref</span></span></td>
|
|
<td><a href="cpp-atomic-atomic_ref.html"><tt>std::atomic_ref</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201806L</span></span></span></td>
|
|
<td><a href="cpp-header-atomic.html"><tt><atomic></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_atomic_shared_ptr</span></span></td>
|
|
<td><a href="cpp-memory-shared_ptr-atomic2.html"><tt>std::atomic<std::shared_ptr></tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201711L</span></span></span></td>
|
|
<td><a href="cpp-header-memory.html"><tt><memory></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_atomic_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">value_initialization</span></span></td>
|
|
<td>修正原子初始化(默认值初始化 <span class="t-lc"><a href="cpp-atomic-atomic.html">std::atomic</a></span> )</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201911L</span></span></span></td>
|
|
<td><a href="cpp-header-atomic.html"><tt><atomic></tt></a> <a href="cpp-header-memory.html"><tt><memory></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_atomic_wait</span></span></td>
|
|
<td>高效的 <span class="t-lc"><a href="cpp-atomic-atomic.html">std::atomic</a></span> 等待</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><a href="cpp-header-atomic.html"><tt><atomic></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_barrier</span></span></td>
|
|
<td><a href="cpp-thread-barrier.html"><tt>std::barrier</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><a href="cpp-header-barrier.html"><tt><barrier></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_bind_front</span></span></td>
|
|
<td><a href="cpp-utility-functional-bind_front.html"><tt>std::bind_front</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><a href="cpp-header-functional.html"><tt><functional></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_bit_cast</span></span></td>
|
|
<td><a href="cpp-numeric-bit_cast.html"><tt>std::bit_cast</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201806L</span></span></span></td>
|
|
<td><a href="cpp-header-bit.html"><tt><bit></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_bitops</span></span></td>
|
|
<td><a href="cpp-numeric.html#.E4.BD.8D.E6.93.8D.E7.BA.B5_.28C.2B.2B20_.E8.B5.B7.29">位操作</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><a href="cpp-header-bit.html"><tt><bit></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_bool_constant</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-types-integral_constant.html">std::bool_constant</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201505L</span></span></span></td>
|
|
<td><a href="cpp-header-type_traits.html"><tt><type_traits></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_bounded_array_traits</span></span></td>
|
|
<td><a href="cpp-types-is_bounded_array.html"><tt>std::is_bounded_array</tt></a> 、 <a href="cpp-types-is_unbounded_array.html"><tt>std::is_unbounded_array</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201902L</span></span></span></td>
|
|
<td><a href="cpp-header-type_traits.html"><tt><type_traits></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_boyer_moore_searcher</span></span></td>
|
|
<td><a href="cpp-utility-functional-boyer_moore_searcher.html">std::boyer_moore_searcher|搜索器</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><a href="cpp-header-functional.html"><tt><functional></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_byte</span></span></td>
|
|
<td><a href="cpp-types-byte.html"><tt>std::byte</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><a href="cpp-header-cstddef.html"><tt><cstddef></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_byteswap</span></span></td>
|
|
<td><a href="cpp-numeric-byteswap.html"><tt>std::byteswap</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202110L</span></span></span></td>
|
|
<td><a href="cpp-header-bit.html"><tt><bit></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_char8_t</span></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">char8_t</span></span> 的库支持</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><a href="cpp-header-atomic.html"><tt><atomic></tt></a> <a href="cpp-header-filesystem.html"><tt><filesystem></tt></a> <a href="cpp-header-istream.html"><tt><istream></tt></a> <a href="cpp-header-limits.html"><tt><limits></tt></a> <a href="cpp-header-locale.html"><tt><locale></tt></a> <a href="cpp-header-ostream.html"><tt><ostream></tt></a> <a href="cpp-header-string.html"><tt><string></tt></a> <a href="cpp-header-string_view.html"><tt><string_view></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="3"><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_chrono</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-chrono-duration.html">std::chrono::duration</a></span> 与 <span class="t-lc"><a href="cpp-chrono-time_point.html">std::chrono::time_point</a></span> 的舍入函数</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201510L</span></span></span></td>
|
|
<td><a href="cpp-header-chrono.html"><tt><chrono></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-lc"><a href="cpp-chrono-duration.html">std::chrono::duration</a></span> 与 <span class="t-lc"><a href="cpp-chrono-time_point.html">std::chrono::time_point</a></span> 的所有成员函数的 constexpr</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201611L</span></span></span></td>
|
|
<td><a href="cpp-header-chrono.html"><tt><chrono></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><a href="cpp-chrono.html#.E6.97.A5.E5.8E.86">日历</a>与<a href="cpp-chrono.html#.E6.97.B6.E5.8C.BA">时区</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><a href="cpp-header-chrono.html"><tt><chrono></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_chrono_udls</span></span></td>
|
|
<td><a href="cpp-chrono-duration.html#.E5.AD.97.E9.9D.A2.E9.87.8F">时间类型的用户定义字面量</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span></td>
|
|
<td><a href="cpp-header-chrono.html"><tt><chrono></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_clamp</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-algorithm-clamp.html">std::clamp</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><a href="cpp-header-algorithm.html"><tt><algorithm></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_complex_udls</span></span></td>
|
|
<td><a href="cpp-numeric-complex-operator_22_22i.html"><code>std::complex</code> 的用户定义字面量</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201309L</span></span></span></td>
|
|
<td><a href="cpp-header-complex.html"><tt><complex></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_concepts</span></span></td>
|
|
<td><a href="cpp-concepts.html">标准库概念</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202002L</span></span></span></td>
|
|
<td><a href="cpp-header-concepts.html"><tt><concepts></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_algorithms</span></span></td>
|
|
<td><a href="cpp-algorithm.html">算法</a>的 constexpr</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201806L</span></span></span></td>
|
|
<td><a href="cpp-header-algorithm.html"><tt><algorithm></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_complex</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-numeric-complex.html">std::complex</a></span> 的 constexpr</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201711L</span></span></span></td>
|
|
<td><a href="cpp-header-complex.html"><tt><complex></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">dynamic_alloc</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-memory-allocator.html">std::allocator</a></span> 与相关工具的</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><a href="cpp-header-memory.html"><tt><memory></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_functional</span></span></td>
|
|
<td>杂项 constexpr ( <span class="t-lc"><a href="cpp-utility-functional-default_searcher.html">std::default_searcher</a></span> ); constexpr INVOKE</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><a href="cpp-header-functional.html"><tt><functional></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_iterator</span></span></td>
|
|
<td>杂项 constexpr ( <span class="t-lc"><a href="cpp-iterator-insert_iterator.html">std::insert_iterator</a></span> 等)</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span></td>
|
|
<td><a href="cpp-header-iterator.html"><tt><iterator></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_memory</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-memory-pointer_traits.html">std::pointer_traits</a></span> 中的 constexpr</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span></td>
|
|
<td><a href="cpp-header-memory.html"><tt><memory></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_numeric</span></span></td>
|
|
<td><a href="cpp-algorithm.html#.E6.95.B0.E5.80.BC.E8.BF.90.E7.AE.97"><numeric> 算法</a>的 constexpr</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201911L</span></span></span></td>
|
|
<td><a href="cpp-header-numeric.html"><tt><numeric></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_string</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-string-basic_string.html">std::string</a></span> 的 constexpr</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><a href="cpp-header-string.html"><tt><string></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">string_view</span></span></td>
|
|
<td>杂项 constexpr ( <span class="t-lc"><a href="cpp-string-basic_string_view-copy.html">std::string_view::copy</a></span> )</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span></td>
|
|
<td><a href="cpp-header-string_view.html"><tt><string_view></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_tuple</span></span></td>
|
|
<td>杂项 constexpr ( <span class="t-lc"><a href="cpp-utility-tuple-operator=.html">std::tuple::operator=</a></span> 等)</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span></td>
|
|
<td><a href="cpp-header-tuple.html"><tt><tuple></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_typeinfo</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-types-type_info-operator_cmp.html">std::type_info::operator==</a></span> 的 constexpr</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202106L</span></span></span></td>
|
|
<td><a href="cpp-header-typeinfo.html"><tt><typeinfo></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_utility</span></span></td>
|
|
<td>杂项 constexpr ( <span class="t-lc"><a href="cpp-utility-pair-operator=.html">std::pair::operator=</a></span> 等)</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span></td>
|
|
<td><a href="cpp-header-utility.html"><tt><utility></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_vector</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-container-vector.html">std::vector</a></span> 的 constexpr</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><a href="cpp-header-vector.html"><tt><vector></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_coroutine</span></span></td>
|
|
<td><a href="cpp-language-coroutines.html">协程</a>(库支持)</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201902L</span></span></span></td>
|
|
<td><a href="cpp-header-coroutine.html"><tt><coroutine></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_destroying_delete</span></span></td>
|
|
<td><a href="cpp-memory-new-operator_delete.html">销毁的 <code>operator delete</code></a> (库支持)</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201806L</span></span></span></td>
|
|
<td><a href="cpp-header-new.html"><tt><new></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_enable_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">shared_from_this</span></span></td>
|
|
<td><a href="cpp-memory-enable_shared_from_this.html">再次启用 shared_from_this</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><a href="cpp-header-memory.html"><tt><memory></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_endian</span></span></td>
|
|
<td><span class="t-lc">std::endian</span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><a href="cpp-header-bit.html"><tt><bit></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_erase_if</span></span></td>
|
|
<td>统一容器擦除</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202002L</span></span></span></td>
|
|
<td><a href="cpp-header-string.html"><tt><string></tt></a> <a href="cpp-header-deque.html"><tt><deque></tt></a> <a href="cpp-header-forward_list.html"><tt><forward_list></tt></a> <a href="cpp-header-list.html"><tt><list></tt></a> <a href="cpp-header-vector.html"><tt><vector></tt></a> <a href="cpp-header-map.html"><tt><map></tt></a> <a href="cpp-header-set.html"><tt><set></tt></a> <a href="cpp-header-unordered_map.html"><tt><unordered_map></tt></a> <a href="cpp-header-unordered_set.html"><tt><unordered_set></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_exchange_function</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-utility-exchange.html">std::exchange</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span></td>
|
|
<td><a href="cpp-header-utility.html"><tt><utility></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="2"><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_execution</span></span></td>
|
|
<td><a href="cpp-algorithm.html#.E6.89.A7.E8.A1.8C.E7.AD.96.E7.95.A5">执行策略</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><a href="cpp-header-execution.html"><tt><execution></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><a href="cpp-algorithm-execution_policy_tag_t.html"><tt>std::execution::unsequenced_policy</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201902L</span></span></span></td>
|
|
<td><a href="cpp-header-execution.html"><tt><execution></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_filesystem</span></span></td>
|
|
<td><a href="cpp-filesystem.html">文件系统库</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201703L</span></span></span></td>
|
|
<td><a href="cpp-header-filesystem.html"><tt><filesystem></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="3"><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_format</span></span></td>
|
|
<td><a href="cpp-utility-format.html">文本格式化</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><a href="cpp-header-format.html"><tt><format></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>编译时格式字符串检查;减少 <span class="t-lc">std::vformat_to</span> 的参数化</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202106L</span></span></span></td>
|
|
<td><a href="cpp-header-format.html"><tt><format></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>修复 <code>chrono</code> 格式化器中的本地环境处理;格式化参数中使用转发引用</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202110L</span></span></span></td>
|
|
<td><a href="cpp-header-format.html"><tt><format></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_gcd_lcm</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-numeric-gcd.html">std::gcd</a></span>、 <span class="t-lc"><a href="cpp-numeric-lcm.html">std::lcm</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span></td>
|
|
<td><a href="cpp-header-numeric.html"><tt><numeric></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_generic_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">associative_lookup</span></span></td>
|
|
<td>关联容器中的异质比较查找</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span></td>
|
|
<td><a href="cpp-header-map.html"><tt><map></tt></a> <a href="cpp-header-set.html"><tt><set></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_generic_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">unordered_lookup</span></span></td>
|
|
<td>无序关联容器中的异质比较查找</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span></td>
|
|
<td><a href="cpp-header-unordered_map.html"><tt><unordered_map></tt></a> <a href="cpp-header-unordered_set.html"><tt><unordered_set></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_hardware_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">interference_size</span></span></td>
|
|
<td><a href="cpp-thread-hardware_destructive_interference_size.html">constexpr std::hardware_{constructive, destructive}_interference_size</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201703L</span></span></span></td>
|
|
<td><a href="cpp-header-new.html"><tt><new></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_has_unique_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">object_representations</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-types-has_unique_object_representations.html">std::has_unique_object_representations</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span></td>
|
|
<td><a href="cpp-header-type_traits.html"><tt><type_traits></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_hypot</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-numeric-math-hypot.html">std::hypot</a></span> 的 3 参数重载</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><a href="cpp-header-cmath.html"><tt><cmath></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_incomplete_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">container_elements</span></span></td>
|
|
<td>标准容器的最小不完整类型支持</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201505L</span></span></span></td>
|
|
<td><a href="cpp-header-forward_list.html"><tt><forward_list></tt></a> <a href="cpp-header-list.html"><tt><list></tt></a> <a href="cpp-header-vector.html"><tt><vector></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_int_pow2</span></span></td>
|
|
<td><a href="cpp-numeric.html#.E4.BD.8D.E6.93.8D.E7.BA.B5_.28C.2B.2B20_.E8.B5.B7.29">整数的 2 的幂运算</a>( <span class="t-lc">std::has_single_bit</span> 、 <span class="t-lc">std::bit_ceil</span> 、 <span class="t-lc">std::bit_floor</span> 、 <span class="t-lc">std::bit_length</span> )</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202002L</span></span></span></td>
|
|
<td><a href="cpp-header-bit.html"><tt><bit></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_integer_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">comparison_functions</span></span></td>
|
|
<td><a href="cpp-utility.html#.E6.95.B4.E6.95.B0.E6.AF.94.E8.BE.83.E5.87.BD.E6.95.B0">整数比较函数</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202002L</span></span></span></td>
|
|
<td><a href="cpp-header-utility.html"><tt><utility></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_integer_sequence</span></span></td>
|
|
<td><a href="cpp-utility-integer_sequence.html">编译时整数序列</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span></td>
|
|
<td><a href="cpp-header-utility.html"><tt><utility></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_integral_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">constant_callable</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-types-integral_constant.html">std::integral_constant::operator()</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span></td>
|
|
<td><a href="cpp-header-type_traits.html"><tt><type_traits></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_interpolate</span></span></td>
|
|
<td><a href="cpp-numeric-lerp.html"><tt>std::lerp</tt></a> 与 <a href="cpp-numeric-midpoint.html"><tt>std::midpoint</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201902L</span></span></span></td>
|
|
<td><a href="cpp-header-cmath.html"><tt><cmath></tt></a> <a href="cpp-header-numeric.html"><tt><numeric></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_invoke</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-utility-functional-invoke.html">std::invoke()</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201411L</span></span></span></td>
|
|
<td><a href="cpp-header-functional.html"><tt><functional></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_invoke_r</span></span></td>
|
|
<td><a href="cpp-utility-functional-invoke.html"><tt>std::invoke_r</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202106L</span></span></span></td>
|
|
<td><a href="cpp-header-functional.html"><tt><functional></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_is_aggregate</span></span></td>
|
|
<td><a href="cpp-types-is_aggregate.html"><tt>std::is_aggregate</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201703L</span></span></span></td>
|
|
<td><a href="cpp-header-type_traits.html"><tt><type_traits></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_is_constant_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">evaluated</span></span></td>
|
|
<td><a href="cpp-types-is_constant_evaluated.html"><tt>std::is_constant_evaluated</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span></td>
|
|
<td><a href="cpp-header-type_traits.html"><tt><type_traits></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_is_final</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-types-is_final.html">std::is_final</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201402L</span></span></span></td>
|
|
<td><a href="cpp-header-type_traits.html"><tt><type_traits></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_is_invocable</span></span></td>
|
|
<td><span class="t-lc">std::is_invocable</span> 、 <span class="t-lc">std::invoke_result</span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201703L</span></span></span></td>
|
|
<td><a href="cpp-header-type_traits.html"><tt><type_traits></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_is_layout_compatible</span></span></td>
|
|
<td><a href="cpp-types-is_layout_compatible.html"><tt>std::is_layout_compatible</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><a href="cpp-header-type_traits.html"><tt><type_traits></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_is_nothrow_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">convertible</span></span></td>
|
|
<td><a href="cpp-types-is_convertible.html"><tt>std::is_nothrow_convertible</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201806L</span></span></span></td>
|
|
<td><a href="cpp-header-type_traits.html"><tt><type_traits></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_is_null_pointer</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-types-is_null_pointer.html">std::is_null_pointer</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201309L</span></span></span></td>
|
|
<td><a href="cpp-header-type_traits.html"><tt><type_traits></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_is_pointer_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">interconvertible</span></span></td>
|
|
<td>指针可互转换特征</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><a href="cpp-header-type_traits.html"><tt><type_traits></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_is_scoped_enum</span></span></td>
|
|
<td><a href="cpp-types-is_scoped_enum.html"><tt>std::is_scoped_enum</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202011L</span></span></span></td>
|
|
<td><a href="cpp-header-type_traits.html"><tt><type_traits></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_is_swappable</span></span></td>
|
|
<td><a href="cpp-types-is_swappable.html">[nothrow-]swappable 特征</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><a href="cpp-header-type_traits.html"><tt><type_traits></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_jthread</span></span></td>
|
|
<td><a href="cpp-thread-stop_token.html">停止记号</a>与<a href="cpp-thread-jthread.html">结合线程</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201911L</span></span></span></td>
|
|
<td><a href="cpp-header-stop_token.html"><tt><stop_token></tt></a> <a href="cpp-header-thread.html"><tt><thread></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_latch</span></span></td>
|
|
<td><a href="cpp-thread-latch.html"><tt>std::latch</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><a href="cpp-header-latch.html"><tt><latch></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_launder</span></span></td>
|
|
<td>核心问题 1776 :替换含引用成员的类对象( <span class="t-lc"><a href="cpp-utility-launder.html">std::launder</a></span> )</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span></td>
|
|
<td><a href="cpp-header-new.html"><tt><new></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_list_remove_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">return_type</span></span></td>
|
|
<td>更改 <span class="t-lc"><a href="cpp-container-forward_list.html">std::forward_list</a></span> 与 <span class="t-lc"><a href="cpp-container-list.html">std::list</a></span> <span class="t-lc"><a href="cpp-container-list-remove.html">remove()</a></span> 、 <span class="t-lc"><a href="cpp-container-list-remove.html">remove_if()</a></span> 及 <span class="t-lc"><a href="cpp-container-list-unique.html">unique()</a></span> 成员的返回类型</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201806L</span></span></span></td>
|
|
<td><a href="cpp-header-forward_list.html"><tt><forward_list></tt></a> <a href="cpp-header-list.html"><tt><list></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_logical_traits</span></span></td>
|
|
<td><a href="cpp-types.html#.E7.89.B9.E5.BE.81.E4.B8.8A.E7.9A.84.E8.BF.90.E7.AE.97">逻辑运算符类型特征</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201510L</span></span></span></td>
|
|
<td><a href="cpp-header-type_traits.html"><tt><type_traits></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_make_from_tuple</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-utility-make_from_tuple.html">std::make_from_tuple()</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span></td>
|
|
<td><a href="cpp-header-tuple.html"><tt><tuple></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_make_reverse_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">iterator</span></span></td>
|
|
<td><a href="cpp-iterator-make_reverse_iterator.html"><tt>std::make_reverse_iterator</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201402L</span></span></span></td>
|
|
<td><a href="cpp-header-iterator.html"><tt><iterator></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_make_unique</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-memory-unique_ptr-make_unique.html">std::make_unique</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span></td>
|
|
<td><a href="cpp-header-memory.html"><tt><memory></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_map_try_emplace</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-container-map-try_emplace.html">std::map::try_emplace</a></span>, <span class="t-lc"><a href="cpp-container-map-insert_or_assign.html">std::map::insert_or_assign</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201411L</span></span></span></td>
|
|
<td><a href="cpp-header-map.html"><tt><map></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_math_constants</span></span></td>
|
|
<td><a href="cpp-header-numbers.html">数学常数</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><a href="cpp-header-numbers.html"><tt><numbers></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_math_special_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">functions</span></span></td>
|
|
<td><a href="cpp-numeric-special_functions.html">C++17 的数学特殊函数</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><a href="cpp-header-cmath.html"><tt><cmath></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_memory_resource</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-memory-memory_resource.html">std::pmr::memory_resource</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><a href="cpp-header-memory_resource.html"><tt><memory_resource></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_monadic_optional</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-utility-optional.html">std::optional</a></span> 中的单子操作</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202110L</span></span></span></td>
|
|
<td><a href="cpp-header-optional.html"><tt><optional></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_move_only_function</span></span></td>
|
|
<td><span class="t-lc">std::move_only_function</span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202110L</span></span></span></td>
|
|
<td><a href="cpp-header-functional.html"><tt><functional></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_node_extract</span></span></td>
|
|
<td>拼接 map 与 set ( <span class="t-lc"><a href="cpp-container-map-extract.html">std::map::extract</a></span> 、 <span class="t-lc"><a href="cpp-container-map-merge.html">std::map::merge</a></span> 、 <a href="cpp-container-map-insert.html"><tt>std::map::insert(node_type)</tt></a> 等)</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span></td>
|
|
<td><a href="cpp-header-map.html"><tt><map></tt></a> <a href="cpp-header-set.html"><tt><set></tt></a> <a href="cpp-header-unordered_map.html"><tt><unordered_map></tt></a> <a href="cpp-header-unordered_set.html"><tt><unordered_set></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_nonmember_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">container_access</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-iterator-size.html">std::size()</a></span> 、 <span class="t-lc"><a href="cpp-iterator-data.html">std::data()</a></span> 及 <span class="t-lc"><a href="cpp-iterator-empty.html">std::empty()</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201411L</span></span></span></td>
|
|
<td><a href="cpp-header-iterator.html"><tt><iterator></tt></a> <a href="cpp-header-array.html"><tt><array></tt></a> <a href="cpp-header-deque.html"><tt><deque></tt></a> <a href="cpp-header-forward_list.html"><tt><forward_list></tt></a> <a href="cpp-header-list.html"><tt><list></tt></a> <a href="cpp-header-map.html"><tt><map></tt></a> <a href="cpp-header-regex.html"><tt><regex></tt></a> <a href="cpp-header-set.html"><tt><set></tt></a> <a href="cpp-header-string.html"><tt><string></tt></a> <a href="cpp-header-unordered_map.html"><tt><unordered_map></tt></a> <a href="cpp-header-unordered_set.html"><tt><unordered_set></tt></a> <a href="cpp-header-vector.html"><tt><vector></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_not_fn</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-utility-functional-not_fn.html">std::not_fn()</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><a href="cpp-header-functional.html"><tt><functional></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_null_iterators</span></span></td>
|
|
<td>空<a href="cpp-named_req-ForwardIterator.html"><span style="font-style:italic">老式向前迭代器</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(LegacyForwardIterator)</span></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span></td>
|
|
<td><a href="cpp-header-iterator.html"><tt><iterator></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="2"><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_optional</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-utility-optional.html">std::optional</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span></td>
|
|
<td><a href="cpp-header-optional.html"><tt><optional></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>完全 <code>constexpr</code> <span class="t-lc"><a href="cpp-utility-optional.html">std::optional</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202106L</span></span></span></td>
|
|
<td><a href="cpp-header-optional.html"><tt><optional></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_out_ptr</span></span></td>
|
|
<td><span class="t-lc">std::out_ptr</span>、 <span class="t-lc">std::inout_ptr</span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202106L</span></span></span></td>
|
|
<td><a href="cpp-header-memory.html"><tt><memory></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_parallel_algorithm</span></span></td>
|
|
<td><a href="cpp-algorithm.html#.E6.89.A7.E8.A1.8C.E7.AD.96.E7.95.A5">并行算法</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><a href="cpp-header-algorithm.html"><tt><algorithm></tt></a> <a href="cpp-header-numeric.html"><tt><numeric></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_polymorphic_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">allocator</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-memory-polymorphic_allocator.html">std::pmr::polymorphic_allocator<></a></span> 作为词汇类型</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201902L</span></span></span></td>
|
|
<td><a href="cpp-header-memory_resource.html"><tt><memory_resource></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_quoted_string_io</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-io-manip-quoted.html">std::quoted</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span></td>
|
|
<td><a href="cpp-header-iomanip.html"><tt><iomanip></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="3"><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_ranges</span></span></td>
|
|
<td><a href="cpp-ranges.html">范围库</a>与<a href="cpp-algorithm-ranges.html">受约束算法</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201911L</span></span></span></td>
|
|
<td rowspan="3"><a href="cpp-header-algorithm.html"><tt><algorithm></tt></a> <a href="cpp-header-functional.html"><tt><functional></tt></a> <a href="cpp-header-iterator.html"><tt><iterator></tt></a> <a href="cpp-header-memory.html"><tt><memory></tt></a> <a href="cpp-header-ranges.html"><tt><ranges></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>不<a href="cpp-concepts-default_initializable.html">可默认初始化</a>的<a href="cpp-ranges-view.html">视图</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202106L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>带<a href="cpp-ranges-owning_view.html">所有权</a>的<a href="cpp-ranges-view.html">视图</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202110L</span></span></span></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_ranges_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">starts_ends_with</span></span></td>
|
|
<td><span class="t-lc">std::ranges::starts_with</span>、 <span class="t-lc">std::ranges::ends_with</span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202106L</span></span></span></td>
|
|
<td><a href="cpp-header-algorithm.html"><tt><algorithm></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_ranges_zip</span></span></td>
|
|
<td><span class="t-lc">std::ranges::zip_view</span>、 <span class="t-lc">std::ranges::zip_transform_view</span>、 <span class="t-lc">std::ranges::adjacent_view</span>、 <span class="t-lc">std::ranges::adjacent_transform_view</span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202110L</span></span></span></td>
|
|
<td><a href="cpp-header-ranges.html"><tt><ranges></tt></a> <a href="cpp-header-tuple.html"><tt><tuple></tt></a> <a href="cpp-header-utility.html"><tt><utility></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_raw_memory_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">algorithms</span></span></td>
|
|
<td><a href="cpp-memory.html#.E6.9C.AA.E5.88.9D.E5.A7.8B.E5.8C.96.E5.AD.98.E5.82.A8">扩展内存管理工具</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span></td>
|
|
<td><a href="cpp-header-memory.html"><tt><memory></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_remove_cvref</span></span></td>
|
|
<td><a href="cpp-types-remove_cvref.html"><tt>std::remove_cvref</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201711L</span></span></span></td>
|
|
<td><a href="cpp-header-type_traits.html"><tt><type_traits></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_result_of_sfinae</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-types-result_of.html">std::result_of</a></span> 与 SFINAE</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201210L</span></span></span></td>
|
|
<td><a href="cpp-header-type_traits.html"><tt><type_traits></tt></a> <a href="cpp-header-functional.html"><tt><functional></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_robust_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">nonmodifying_seq_ops</span></span></td>
|
|
<td>使不修改序列的操作更稳健( <span class="t-lc"><a href="cpp-algorithm-mismatch.html">std::mismatch</a></span> 、 <span class="t-lc"><a href="cpp-algorithm-equal.html">std::equal</a></span> 及 <span class="t-lc"><a href="cpp-algorithm-is_permutation.html">std::is_permutation</a></span> 的双范围重载)</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span></td>
|
|
<td><a href="cpp-header-algorithm.html"><tt><algorithm></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_sample</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-algorithm-sample.html">std::sample</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span></td>
|
|
<td><a href="cpp-header-algorithm.html"><tt><algorithm></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_scoped_lock</span></span></td>
|
|
<td><a href="cpp-thread-scoped_lock.html"><tt>std::scoped_lock</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201703L</span></span></span></td>
|
|
<td><a href="cpp-header-mutex.html"><tt><mutex></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_semaphore</span></span></td>
|
|
<td><a href="cpp-thread-counting_semaphore.html"><code>std::counting_semaphore</code> 、 <code>std::binary_semaphore</code></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><a href="cpp-header-semaphore.html"><tt><semaphore></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_shared_mutex</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-thread-shared_mutex.html">std::shared_mutex</a></span> (无时限)</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201505L</span></span></span></td>
|
|
<td><a href="cpp-header-shared_mutex.html"><tt><shared_mutex></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="2"><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_shared_ptr_arrays</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-memory-shared_ptr.html">std::shared_ptr<T[]></a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201611L</span></span></span></td>
|
|
<td><a href="cpp-header-memory.html"><tt><memory></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-lc"><a href="cpp-memory-shared_ptr-make_shared.html">std::make_shared</a></span> 的数组支持</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201707L</span></span></span></td>
|
|
<td><a href="cpp-header-memory.html"><tt><memory></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_shared_ptr_weak_type</span></span></td>
|
|
<td><a href="cpp-memory-shared_ptr.html"><tt>shared_ptr::weak_type</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span></td>
|
|
<td><a href="cpp-header-memory.html"><tt><memory></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_shared_timed_mutex</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-thread-shared_timed_mutex.html">std::shared_timed_mutex</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201402L</span></span></span></td>
|
|
<td><a href="cpp-header-shared_mutex.html"><tt><shared_mutex></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_shift</span></span></td>
|
|
<td><a href="cpp-algorithm-shift.html"><tt>std::shift_left</tt></a> 与 <a href="cpp-algorithm-shift.html"><tt>std::shift_right</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201806L</span></span></span></td>
|
|
<td><a href="cpp-header-algorithm.html"><tt><algorithm></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_smart_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">ptr_for_overwrite</span></span></td>
|
|
<td>用默认初始化创建智能指针( <span class="t-lc">std::allocate_shared_for_overwrite</span> 、 <span class="t-lc">std::make_shared_for_overwrite</span> 、 <span class="t-lc">std::make_unique_for_overwrite</span> )</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span></td>
|
|
<td><a href="cpp-header-memory.html"><tt><memory></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_source_location</span></span></td>
|
|
<td>源码信息捕获( <span class="t-lc">std::source_location</span> )</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><a href="cpp-header-source_location.html"><tt><source_location></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_span</span></span></td>
|
|
<td><a href="cpp-container-span.html"><tt>std::span</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202002L</span></span></span></td>
|
|
<td><a href="cpp-header-span.html"><tt><span></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_spanstream</span></span></td>
|
|
<td><a href="cpp-io-basic_spanbuf.html"><tt>std::spanbuf</tt></a>、 <a href="cpp-io-basic_spanstream.html"><tt>std::spanstream</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202106L</span></span></span></td>
|
|
<td><a href="cpp-header-spanstream.html"><tt><spanstream></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_ssize</span></span></td>
|
|
<td><a href="cpp-iterator-size.html"><tt>std::ssize</tt></a> 与无符号的 <a href="cpp-container-span-size.html"><tt>std::span::size</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201902L</span></span></span></td>
|
|
<td><a href="cpp-header-iterator.html"><tt><iterator></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_stacktrace</span></span></td>
|
|
<td><a href="cpp-utility.html#.E6.A0.88.E8.B8.AA">栈踪库</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202011L</span></span></span></td>
|
|
<td><a href="cpp-header-stacktrace.html"><tt><stacktrace></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_starts_ends_with</span></span></td>
|
|
<td>字符串前缀与后缀检查( <span class="t-lc"><a href="cpp-string-basic_string.html">std::string</a></span> 与 <span class="t-lc"><a href="cpp-string-basic_string_view.html">std::string_view</a></span> 的 <span class="t-lc">starts_with()</span> 与 <span class="t-lc">ends_with()</span> )</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201711L</span></span></span></td>
|
|
<td><a href="cpp-header-string.html"><tt><string></tt></a> <a href="cpp-header-string_view.html"><tt><string_view></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_stdatomic_h</span></span></td>
|
|
<td>C 原子操作的兼容头文件</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202011L</span></span></span></td>
|
|
<td><a href="cpp-header-stdatomic.h.html"><tt><stdatomic.h></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_string_contains</span></span></td>
|
|
<td><a href="cpp-string-basic_string-contains.html"><tt>std::basic_string</tt></a> 与 <a href="cpp-string-basic_string_view-contains.html"><tt>std::basic_string_view</tt></a> 的 <code>contains</code> 函数</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202011L</span></span></span></td>
|
|
<td><a href="cpp-header-string.html"><tt><string></tt></a> <a href="cpp-header-string_view.html"><tt><string_view></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_string_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">resize_and_overwrite</span></span></td>
|
|
<td><span class="t-lc">std::basic_string::resize_and_overwrite</span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202110L</span></span></span></td>
|
|
<td><a href="cpp-header-string.html"><tt><string></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_string_udls</span></span></td>
|
|
<td><a href="cpp-string-basic_string-operator_22_22s.html">字符串类型的用户定义字面量</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span></td>
|
|
<td><a href="cpp-header-string.html"><tt><string></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="2"><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_string_view</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-string-basic_string_view.html">std::string_view</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span></td>
|
|
<td><a href="cpp-header-string.html"><tt><string></tt></a> <a href="cpp-header-string_view.html"><tt><string_view></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><a href="cpp-named_req-ConstexprIterator.html"><span style="font-style:italic">常量表达式迭代器</span> <span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">(ConstexprIterator)</span></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201803L</span></span></span></td>
|
|
<td><a href="cpp-header-string.html"><tt><string></tt></a> <a href="cpp-header-string_view.html"><tt><string_view></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_syncbuf</span></span></td>
|
|
<td>同步缓冲的输出流( <span class="t-lc">std::syncbuf</span> 、 <span class="t-lc">std::osyncstream</span> )与操纵符</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201803L</span></span></span></td>
|
|
<td><a href="cpp-header-syncstream.html"><tt><syncstream></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_three_way_comparison</span></span></td>
|
|
<td><a href="cpp-language-operator_comparison.html#.E4.B8.89.E8.B7.AF.E6.AF.94.E8.BE.83">三路比较</a>(库支持);添加三路比较到标准库</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><a href="cpp-header-compare.html"><tt><compare></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_to_address</span></span></td>
|
|
<td>转换指针为裸指针( <span class="t-lc">std::to_address</span> )</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201711L</span></span></span></td>
|
|
<td><a href="cpp-header-memory.html"><tt><memory></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_to_array</span></span></td>
|
|
<td><a href="cpp-container-array-to_array.html"><tt>std::to_array</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span></td>
|
|
<td><a href="cpp-header-array.html"><tt><array></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_to_chars</span></span></td>
|
|
<td>初等字符串转换( <span class="t-lc">std::to_chars</span> 、 <span class="t-lc">std::from_chars</span> )</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201611L</span></span></span></td>
|
|
<td><a href="cpp-header-charconv.html"><tt><charconv></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_to_underlying</span></span></td>
|
|
<td><a href="cpp-utility-to_underlying.html"><tt>std::to_underlying</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202102L</span></span></span></td>
|
|
<td><a href="cpp-header-utility.html"><tt><utility></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_transformation_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">trait_aliases</span></span></td>
|
|
<td>变换特征的别名模板</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span></td>
|
|
<td><a href="cpp-header-type_traits.html"><tt><type_traits></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="2"><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_transparent_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">operators</span></span></td>
|
|
<td>通透运算符函数对象( <span class="t-lc">std::less<></span> 等)</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201210L</span></span></span></td>
|
|
<td><a href="cpp-header-functional.html"><tt><functional></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>通透的 <span class="t-lc"><a href="cpp-memory-owner_less.html">std::owner_less</a></span> ( <a href="cpp-memory-owner_less_void.html"><tt>std::owner_less<void></tt></a> )</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201510L</span></span></span></td>
|
|
<td><a href="cpp-header-memory.html"><tt><memory></tt></a> <a href="cpp-header-functional.html"><tt><functional></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_tuple_element_t</span></span></td>
|
|
<td><a href="cpp-utility-tuple-tuple_element.html"><tt>std::tuple_element_t</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201402L</span></span></span></td>
|
|
<td><a href="cpp-header-tuple.html"><tt><tuple></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_tuples_by_type</span></span></td>
|
|
<td><a href="cpp-utility-tuple-get.html">按类型寻址 tuple</a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span></td>
|
|
<td><a href="cpp-header-tuple.html"><tt><tuple></tt></a> <a href="cpp-header-utility.html"><tt><utility></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_type_identity</span></span></td>
|
|
<td><span class="t-lc">std::type_identity</span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201806L</span></span></span></td>
|
|
<td><a href="cpp-header-type_traits.html"><tt><type_traits></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_type_trait_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">variable_templates</span></span></td>
|
|
<td>类型特征变量模板( <span class="t-lc"><a href="cpp-types-is_void.html">std::is_void_v</a></span> 等)</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201510L</span></span></span></td>
|
|
<td><a href="cpp-header-type_traits.html"><tt><type_traits></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_uncaught_exceptions</span></span></td>
|
|
<td><a href="cpp-error-uncaught_exception.html"><tt>std::uncaught_exceptions</tt></a></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201411L</span></span></span></td>
|
|
<td><a href="cpp-header-exception.html"><tt><exception></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_unordered_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">map_try_emplace</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-container-unordered_map-try_emplace.html">std::unordered_map::try_emplace</a></span> 、 <span class="t-lc"><a href="cpp-container-unordered_map-insert_or_assign.html">std::unordered_map::insert_or_assign</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201411L</span></span></span></td>
|
|
<td><a href="cpp-header-unordered_map.html"><tt><unordered_map></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_unwrap_ref</span></span></td>
|
|
<td><span class="t-lc">std::unwrap_ref_decay</span> 与 <span class="t-lc">std::unwrap_reference</span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span></td>
|
|
<td><a href="cpp-header-type_traits.html"><tt><type_traits></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="3"><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_variant</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-utility-variant.html">std::variant</a></span> : C++17 的类型安全联合体</td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span></td>
|
|
<td><a href="cpp-header-variant.html"><tt><variant></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-lc"><a href="cpp-utility-variant.html">std::variant</a></span> 的派生类的 <span class="t-lc"><a href="cpp-utility-variant-visit.html">std::visit</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202102L</span></span></span></td>
|
|
<td><a href="cpp-header-variant.html"><tt><variant></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td>完全 <code>constexpr</code> <span class="t-lc"><a href="cpp-utility-variant.html">std::variant</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202106L</span></span></span></td>
|
|
<td><a href="cpp-header-variant.html"><tt><variant></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx23">(C++23)</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_void_t</span></span></td>
|
|
<td><span class="t-lc"><a href="cpp-types-void_t.html">std::void_t</a></span></td>
|
|
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201411L</span></span></span></td>
|
|
<td><a href="cpp-header-type_traits.html"><tt><type_traits></tt></a></td>
|
|
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span></td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">示例</span></h3>
|
|
<h4><span class="mw-headline" id=".E6.AD.A3.E5.B8.B8.E4.BD.BF.E7.94.A8">正常使用</span></h4>
|
|
<div class="t-example">
|
|
<div class="t-example-live-link"></div>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="co2">#ifdef __has_include // 检查 __has_include 是否存在</span>
|
|
<span class="co2"># if __has_include(<optional>) // 检查标准库</span>
|
|
<span class="co2"># include <optional></span>
|
|
<span class="co2"># elif __has_include(<experimental/optional>) // 检查实验版本</span>
|
|
<span class="co2"># include <experimental/optional></span>
|
|
<span class="co2"># elif __has_include(<boost/optional.hpp>) // 尝试外部库</span>
|
|
<span class="co2"># include <boost/optional.hpp></span>
|
|
<span class="co2"># else // 完全找不到</span>
|
|
<span class="co2"># error "Missing <optional>"</span>
|
|
<span class="co2"># endif</span>
|
|
<span class="co2">#endif</span>
|
|
|
|
<span class="co2">#ifdef __has_cpp_attribute // 检查 __has_cpp_attribute 是否存在</span>
|
|
<span class="co2"># if __has_cpp_attribute(deprecated) // 检查一个属性</span>
|
|
<span class="co2"># define DEPRECATED(msg) [[deprecated(msg)]]</span>
|
|
<span class="co2"># endif</span>
|
|
<span class="co2">#endif</span>
|
|
<span class="co2">#ifndef DEPRECATED</span>
|
|
<span class="co2"># define DEPRECATED(msg)</span>
|
|
<span class="co2">#endif</span>
|
|
|
|
DEPRECATED<span class="br0">(</span><span class="st0">"foo() has been deprecated"</span><span class="br0">)</span> <span class="kw4">void</span> foo<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="co2">#if __cpp_constexpr >= 201304 // 检查功能特性的指定版本</span>
|
|
<span class="co2"># define CONSTEXPR constexpr</span>
|
|
<span class="co2">#else</span>
|
|
<span class="co2"># define CONSTEXPR inline</span>
|
|
<span class="co2">#endif</span>
|
|
|
|
CONSTEXPR <span class="kw4">int</span> bar<span class="br0">(</span><span class="kw4">unsigned</span> i<span class="br0">)</span>
|
|
<span class="br0">{</span>
|
|
<span class="co2">#ifdef __cpp_binary_literals // 检查功能特性是否存在</span>
|
|
<span class="kw4">unsigned</span> mask1 <span class="sy1">=</span> <span class="nu6">0b11000000</span><span class="sy4">;</span>
|
|
<span class="kw4">unsigned</span> mask2 <span class="sy1">=</span> <span class="nu6">0b00000111</span><span class="sy4">;</span>
|
|
<span class="co2">#else</span>
|
|
<span class="kw4">unsigned</span> mask1 <span class="sy1">=</span> <span class="nu12">0xA0</span><span class="sy4">;</span>
|
|
<span class="kw4">unsigned</span> mask2 <span class="sy1">=</span> <span class="nu12">0x07</span><span class="sy4">;</span>
|
|
<span class="co2">#endif</span>
|
|
<span class="kw1">if</span> <span class="br0">(</span> i <span class="sy3">&</span> mask1 <span class="br0">)</span>
|
|
<span class="kw1">return</span> <span class="nu0">1</span><span class="sy4">;</span>
|
|
<span class="kw1">if</span> <span class="br0">(</span> i <span class="sy3">&</span> mask2 <span class="br0">)</span>
|
|
<span class="kw1">return</span> <span class="nu0">2</span><span class="sy4">;</span>
|
|
<span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
|
|
<span class="br0">{</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<h4><span class="mw-headline" id=".E7.BC.96.E8.AF.91.E5.99.A8.E5.8A.9F.E8.83.BD.E7.89.B9.E6.80.A7.E6.94.BE.E5.87.BA">编译器功能特性放出</span></h4>
|
|
<div class="t-template-editlink" style=""></div>
|
|
<div class="t-example">
|
|
<p>以下示例放出 C++ 编译器功能特性与属性。</p>
|
|
<div class="t-example-live-link"></div>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="co2">#if __cplusplus < 201100</span>
|
|
<span class="co2"># error "C++11 or better is required"</span>
|
|
<span class="co2">#endif</span>
|
|
|
|
<span class="co2">#include <algorithm></span>
|
|
<span class="co2">#include <cstring></span>
|
|
<span class="co2">#include <iomanip></span>
|
|
<span class="co2">#include <iostream></span>
|
|
<span class="co2">#include <string></span>
|
|
|
|
<span class="co2">#ifdef __has_include</span>
|
|
<span class="co2"># if __has_include(<version>)</span>
|
|
<span class="co2"># include <version></span>
|
|
<span class="co2"># endif</span>
|
|
<span class="co2">#endif</span>
|
|
|
|
<span class="co2">#define COMPILER_FEATURE_VALUE(value) #value</span>
|
|
<span class="co2">#define COMPILER_FEATURE_ENTRY(name) { #name, COMPILER_FEATURE_VALUE(name) },</span>
|
|
|
|
<span class="co2">#ifdef __has_cpp_attribute</span>
|
|
<span class="co2"># define COMPILER_ATTRIBUTE_VALUE_AS_STRING(s) #s</span>
|
|
<span class="co2"># define COMPILER_ATTRIBUTE_AS_NUMBER(x) COMPILER_ATTRIBUTE_VALUE_AS_STRING(x)</span>
|
|
<span class="co2"># define COMPILER_ATTRIBUTE_ENTRY(attr) \
|
|
{ #attr, COMPILER_ATTRIBUTE_AS_NUMBER(__has_cpp_attribute(attr)) },</span>
|
|
<span class="co2">#else</span>
|
|
<span class="co2"># define COMPILER_ATTRIBUTE_ENTRY(attr) { #attr, "_" },</span>
|
|
<span class="co2">#endif</span>
|
|
|
|
<span class="co1">// 更改这些选项以仅打印所需的信息。</span>
|
|
<span class="kw4">static</span> <span class="kw1">struct</span> PrintOptions <span class="br0">{</span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> titles <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> attributes <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> general_features <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> core_features <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> lib_features <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> supported_features <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> unsupported_features <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> sorted_by_value <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> cxx11 <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> cxx14 <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> cxx17 <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> cxx20 <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> cxx23 <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
|
|
<span class="br0">}</span> print<span class="sy4">;</span>
|
|
|
|
<span class="kw1">struct</span> CompilerFeature <span class="br0">{</span>
|
|
CompilerFeature<span class="br0">(</span><span class="kw4">const</span> <span class="kw4">char</span><span class="sy2">*</span> name <span class="sy1">=</span> nullptr, <span class="kw4">const</span> <span class="kw4">char</span><span class="sy2">*</span> value <span class="sy1">=</span> nullptr<span class="br0">)</span>
|
|
<span class="sy4">:</span> name<span class="br0">(</span>name<span class="br0">)</span>, value<span class="br0">(</span>value<span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span>
|
|
<span class="kw4">const</span> <span class="kw4">char</span><span class="sy2">*</span> name<span class="sy4">;</span> <span class="kw4">const</span> <span class="kw4">char</span><span class="sy2">*</span> value<span class="sy4">;</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw4">static</span> CompilerFeature cxx<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cplusplus<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_exceptions<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_rtti<span class="br0">)</span>
|
|
<span class="co2">#if 0</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__GNUC__<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__GNUC_MINOR__<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__GNUC_PATCHLEVEL__<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__GNUG__<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__clang__<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__clang_major__<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__clang_minor__<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__clang_patchlevel__<span class="br0">)</span>
|
|
<span class="co2">#endif</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="kw4">static</span> CompilerFeature cxx11<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_alias_templates<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_attributes<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_constexpr<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_decltype<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_delegating_constructors<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_inheriting_constructors<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_initializer_lists<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lambdas<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_nsdmi<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_range_based_for<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_raw_strings<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_ref_qualifiers<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_rvalue_references<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_static_assert<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_threadsafe_static_init<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_unicode_characters<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_unicode_literals<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_user_defined_literals<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_variadic_templates<span class="br0">)</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="kw4">static</span> CompilerFeature cxx14<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_aggregate_nsdmi<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_binary_literals<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_constexpr<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_decltype_auto<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_generic_lambdas<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_init_captures<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_return_type_deduction<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_sized_deallocation<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_variable_templates<span class="br0">)</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="kw4">static</span> CompilerFeature cxx14lib<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_chrono_udls<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_complex_udls<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_exchange_function<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_generic_associative_lookup<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_integer_sequence<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_integral_constant_callable<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_is_final<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_is_null_pointer<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_make_reverse_iterator<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_make_unique<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_null_iterators<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_quoted_string_io<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_result_of_sfinae<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_robust_nonmodifying_seq_ops<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_shared_timed_mutex<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_string_udls<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_transformation_trait_aliases<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_transparent_operators<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_tuple_element_t<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_tuples_by_type<span class="br0">)</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw4">static</span> CompilerFeature cxx17<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_aggregate_bases<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_aligned_new<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_capture_star_this<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_constexpr<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_deduction_guides<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_enumerator_attributes<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_fold_expressions<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_guaranteed_copy_elision<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_hex_float<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_if_constexpr<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_inheriting_constructors<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_inline_variables<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_namespace_attributes<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_noexcept_function_type<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_nontype_template_args<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_nontype_template_parameter_auto<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_range_based_for<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_static_assert<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_structured_bindings<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_template_template_args<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_variadic_using<span class="br0">)</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="kw4">static</span> CompilerFeature cxx17lib<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_addressof_constexpr<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_allocator_traits_is_always_equal<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_any<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_apply<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_array_constexpr<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_as_const<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_atomic_is_always_lock_free<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_bool_constant<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_boyer_moore_searcher<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_byte<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_chrono<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_clamp<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_enable_shared_from_this<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_execution<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_filesystem<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_gcd_lcm<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_hardware_interference_size<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_has_unique_object_representations<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_hypot<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_incomplete_container_elements<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_invoke<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_is_aggregate<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_is_invocable<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_is_swappable<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_launder<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_logical_traits<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_make_from_tuple<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_map_try_emplace<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_math_special_functions<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_memory_resource<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_node_extract<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_nonmember_container_access<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_not_fn<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_optional<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_parallel_algorithm<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_raw_memory_algorithms<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_sample<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_scoped_lock<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_shared_mutex<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_shared_ptr_arrays<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_shared_ptr_weak_type<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_string_view<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_to_chars<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_transparent_operators<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_type_trait_variable_templates<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_uncaught_exceptions<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_unordered_map_try_emplace<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_variant<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_void_t<span class="br0">)</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw4">static</span> CompilerFeature cxx20<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_aggregate_paren_init<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_char8_t<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_concepts<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_conditional_explicit<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_consteval<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_constexpr<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_constexpr_dynamic_alloc<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_constexpr_in_decltype<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_constinit<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_deduction_guides<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_designated_initializers<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_generic_lambdas<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_impl_coroutine<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_impl_destroying_delete<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_impl_three_way_comparison<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_init_captures<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_modules<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_nontype_template_args<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_using_enum<span class="br0">)</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="kw4">static</span> CompilerFeature cxx20lib<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_array_constexpr<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_assume_aligned<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_atomic_flag_test<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_atomic_float<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_atomic_lock_free_type_aliases<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_atomic_ref<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_atomic_shared_ptr<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_atomic_value_initialization<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_atomic_wait<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_barrier<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_bind_front<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_bit_cast<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_bitops<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_bounded_array_traits<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_char8_t<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_chrono<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_concepts<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_algorithms<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_complex<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_dynamic_alloc<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_functional<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_iterator<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_memory<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_numeric<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_string<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_string_view<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_tuple<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_utility<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_vector<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_coroutine<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_destroying_delete<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_endian<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_erase_if<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_execution<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_format<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_generic_unordered_lookup<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_int_pow2<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_integer_comparison_functions<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_interpolate<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_is_constant_evaluated<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_is_layout_compatible<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_is_nothrow_convertible<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_is_pointer_interconvertible<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_jthread<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_latch<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_list_remove_return_type<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_math_constants<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_polymorphic_allocator<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_ranges<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_remove_cvref<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_semaphore<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_shared_ptr_arrays<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_shift<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_smart_ptr_for_overwrite<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_source_location<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_span<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_ssize<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_starts_ends_with<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_string_view<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_syncbuf<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_three_way_comparison<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_to_address<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_to_array<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_type_identity<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_unwrap_ref<span class="br0">)</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw4">static</span> CompilerFeature cxx23<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
|
|
<span class="co1">//< 继续填充</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_if_consteval<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_size_t_suffix<span class="br0">)</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="kw4">static</span> CompilerFeature cxx23lib<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
|
|
<span class="co1">//< 继续填充</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_typeinfo<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_invoke_r<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_is_scoped_enum<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_stacktrace<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_stdatomic_h<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_string_contains<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_to_underlying<span class="br0">)</span>
|
|
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_variant<span class="br0">)</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw4">static</span> CompilerFeature attributes<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
|
|
COMPILER_ATTRIBUTE_ENTRY<span class="br0">(</span>carries_dependency<span class="br0">)</span>
|
|
COMPILER_ATTRIBUTE_ENTRY<span class="br0">(</span>deprecated<span class="br0">)</span>
|
|
COMPILER_ATTRIBUTE_ENTRY<span class="br0">(</span>fallthrough<span class="br0">)</span>
|
|
COMPILER_ATTRIBUTE_ENTRY<span class="br0">(</span>likely<span class="br0">)</span>
|
|
COMPILER_ATTRIBUTE_ENTRY<span class="br0">(</span>maybe_unused<span class="br0">)</span>
|
|
COMPILER_ATTRIBUTE_ENTRY<span class="br0">(</span>nodiscard<span class="br0">)</span>
|
|
COMPILER_ATTRIBUTE_ENTRY<span class="br0">(</span>noreturn<span class="br0">)</span>
|
|
COMPILER_ATTRIBUTE_ENTRY<span class="br0">(</span>no_unique_address<span class="br0">)</span>
|
|
COMPILER_ATTRIBUTE_ENTRY<span class="br0">(</span>unlikely<span class="br0">)</span>
|
|
<span class="br0">}</span><span class="sy4">;</span>
|
|
|
|
<span class="kw4">constexpr</span> <span class="kw4">bool</span> is_feature_supported<span class="br0">(</span><span class="kw4">const</span> CompilerFeature<span class="sy3">&</span> x<span class="br0">)</span> <span class="br0">{</span>
|
|
<span class="kw1">return</span> x.<span class="me1">value</span><span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span> <span class="sy3">!</span><span class="sy1">=</span> <span class="st0">'_'</span> <span class="sy3">&&</span> x.<span class="me1">value</span><span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span> <span class="sy3">!</span><span class="sy1">=</span> <span class="st0">'0'</span> <span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">inline</span> <span class="kw4">void</span> print_compiler_feature<span class="br0">(</span><span class="kw4">const</span> CompilerFeature<span class="sy3">&</span> x<span class="br0">)</span> <span class="br0">{</span>
|
|
<span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">int</span> max_name_length <span class="sy1">=</span> <span class="nu0">44</span><span class="sy4">;</span> <span class="co1">//< Update if necessary</span>
|
|
<a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a> value<span class="br0">{</span> is_feature_supported<span class="br0">(</span>x<span class="br0">)</span> <span class="sy4">?</span> x.<span class="me1">value</span> <span class="sy4">:</span> <span class="st0">"------"</span> <span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="kw1">if</span> <span class="br0">(</span>value.<span class="me1">back</span><span class="br0">(</span><span class="br0">)</span> <span class="sy1">==</span> <span class="st0">'L'</span><span class="br0">)</span> value.<span class="me1">pop_back</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">//~ 201603L -> 201603</span>
|
|
<span class="co1">// value.insert(4, 1, '-'); //~ 201603 -> 2016-03</span>
|
|
<span class="kw1">if</span> <span class="br0">(</span> <span class="br0">(</span>print.<span class="me1">supported_features</span> <span class="sy3">&&</span> is_feature_supported<span class="br0">(</span>x<span class="br0">)</span><span class="br0">)</span>
|
|
or <span class="br0">(</span>print.<span class="me1">unsupported_features</span> <span class="sy3">&&</span> <span class="sy3">!</span>is_feature_supported<span class="br0">(</span>x<span class="br0">)</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> <a href="cpp-io-manip-left.html"><span class="kw1779">std::<span class="me2">left</span></span></a> <span class="sy1"><<</span> <a href="cpp-io-manip-setw.html"><span class="kw1797">std::<span class="me2">setw</span></span></a><span class="br0">(</span>max_name_length<span class="br0">)</span>
|
|
<span class="sy1"><<</span> x.<span class="me1">name</span> <span class="sy1"><<</span> <span class="st0">" "</span> <span class="sy1"><<</span> value <span class="sy1"><<</span> <span class="st0">'<span class="es1">\n</span>'</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw1">template</span><span class="sy1"><</span><a href="cpp-types-size_t.html"><span class="kw100">std::<span class="me2">size_t</span></span></a> N<span class="sy1">></span>
|
|
<span class="kw1">inline</span> <span class="kw4">void</span> show<span class="br0">(</span><span class="kw4">char</span> <span class="kw4">const</span><span class="sy2">*</span> title, CompilerFeature <span class="br0">(</span><span class="sy3">&</span>features<span class="br0">)</span><span class="br0">[</span>N<span class="br0">]</span><span class="br0">)</span> <span class="br0">{</span>
|
|
<span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">titles</span><span class="br0">)</span> <span class="br0">{</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> <span class="st0">'<span class="es1">\n</span>'</span> <span class="sy1"><<</span> <a href="cpp-io-manip-left.html"><span class="kw1779">std::<span class="me2">left</span></span></a> <span class="sy1"><<</span> title <span class="sy1"><<</span> <span class="st0">'<span class="es1">\n</span>'</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">sorted_by_value</span><span class="br0">)</span> <span class="br0">{</span>
|
|
<a href="cpp-algorithm-sort.html"><span class="kw1618">std::<span class="me2">sort</span></span></a><span class="br0">(</span><a href="cpp-iterator-begin.html"><span class="kw676">std::<span class="me2">begin</span></span></a><span class="br0">(</span>features<span class="br0">)</span>, <a href="cpp-iterator-end.html"><span class="kw680">std::<span class="me2">end</span></span></a><span class="br0">(</span>features<span class="br0">)</span>,
|
|
<span class="br0">[</span><span class="br0">]</span><span class="br0">(</span>CompilerFeature <span class="kw4">const</span><span class="sy3">&</span> lhs, CompilerFeature <span class="kw4">const</span><span class="sy3">&</span> rhs<span class="br0">)</span> <span class="br0">{</span>
|
|
<span class="kw1">return</span> <a href="cpp-string-byte-strcmp.html"><span class="kw1146">std::<span class="me2">strcmp</span></span></a><span class="br0">(</span>lhs.<span class="me1">value</span>, rhs.<span class="me1">value</span><span class="br0">)</span> <span class="sy1"><</span> <span class="nu0">0</span><span class="sy4">;</span>
|
|
<span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<span class="kw1">for</span> <span class="br0">(</span><span class="kw4">const</span> CompilerFeature<span class="sy3">&</span> x <span class="sy4">:</span> features<span class="br0">)</span> <span class="br0">{</span>
|
|
print_compiler_feature<span class="br0">(</span>x<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<span class="br0">}</span>
|
|
|
|
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
|
|
<span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">general_features</span><span class="br0">)</span> show<span class="br0">(</span><span class="st0">"C++ GENERAL"</span>, cxx<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">cxx11</span> <span class="sy3">&&</span> print.<span class="me1">core_features</span><span class="br0">)</span> show<span class="br0">(</span><span class="st0">"C++11 CORE"</span>, cxx11<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">cxx14</span> <span class="sy3">&&</span> print.<span class="me1">core_features</span><span class="br0">)</span> show<span class="br0">(</span><span class="st0">"C++14 CORE"</span>, cxx14<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">cxx14</span> <span class="sy3">&&</span> print.<span class="me1">lib_features</span> <span class="br0">)</span> show<span class="br0">(</span><span class="st0">"C++14 LIB"</span> , cxx14lib<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">cxx17</span> <span class="sy3">&&</span> print.<span class="me1">core_features</span><span class="br0">)</span> show<span class="br0">(</span><span class="st0">"C++17 CORE"</span>, cxx17<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">cxx17</span> <span class="sy3">&&</span> print.<span class="me1">lib_features</span> <span class="br0">)</span> show<span class="br0">(</span><span class="st0">"C++17 LIB"</span> , cxx17lib<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">cxx20</span> <span class="sy3">&&</span> print.<span class="me1">core_features</span><span class="br0">)</span> show<span class="br0">(</span><span class="st0">"C++20 CORE"</span>, cxx20<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">cxx20</span> <span class="sy3">&&</span> print.<span class="me1">lib_features</span> <span class="br0">)</span> show<span class="br0">(</span><span class="st0">"C++20 LIB"</span> , cxx20lib<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">cxx23</span> <span class="sy3">&&</span> print.<span class="me1">core_features</span><span class="br0">)</span> show<span class="br0">(</span><span class="st0">"C++23 CORE"</span>, cxx23<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">cxx23</span> <span class="sy3">&&</span> print.<span class="me1">lib_features</span> <span class="br0">)</span> show<span class="br0">(</span><span class="st0">"C++23 LIB"</span> , cxx23lib<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">attributes</span><span class="br0">)</span> show<span class="br0">(</span><span class="st0">"ATTRIBUTES"</span>, attributes<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<p>可能的输出:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="text source-text">
|
|
<pre class="de1">C++ GENERAL
|
|
__cplusplus 202002
|
|
__cpp_exceptions 199711
|
|
__cpp_rtti 199711
|
|
|
|
C++11 CORE
|
|
__cpp_alias_templates 200704
|
|
__cpp_attributes 200809
|
|
__cpp_constexpr 201907
|
|
__cpp_decltype 200707
|
|
__cpp_delegating_constructors 200604
|
|
__cpp_inheriting_constructors 201511
|
|
__cpp_initializer_lists 200806
|
|
__cpp_lambdas 200907
|
|
__cpp_nsdmi 200809
|
|
__cpp_range_based_for 201603
|
|
__cpp_raw_strings 200710
|
|
__cpp_ref_qualifiers 200710
|
|
__cpp_rvalue_references 200610
|
|
__cpp_static_assert 201411
|
|
__cpp_threadsafe_static_init 200806
|
|
__cpp_unicode_characters 200704
|
|
__cpp_unicode_literals 200710
|
|
__cpp_user_defined_literals 200809
|
|
__cpp_variadic_templates 200704
|
|
|
|
C++14 CORE
|
|
__cpp_aggregate_nsdmi 201304
|
|
__cpp_binary_literals 201304
|
|
__cpp_constexpr 201907
|
|
__cpp_decltype_auto 201304
|
|
__cpp_generic_lambdas 201707
|
|
__cpp_init_captures 201803
|
|
__cpp_return_type_deduction 201304
|
|
__cpp_sized_deallocation ------
|
|
__cpp_variable_templates 201304
|
|
|
|
... truncated ...</pre></div>
|
|
</div>
|
|
</div>
|
|
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">参阅</span></h3>
|
|
<ul>
|
|
<li><a href="cpp-utility-feature_test.html">库功能特性测试宏</a> <span class="t-mark-rev t-since-cxx20">(C++20)</span> 定义于 <a href="cpp-header-version.html"><tt><version></tt></a></li>
|
|
<li><a rel="nofollow" class="external text" href="http://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations">特性测试推荐的官方文档</a></li>
|
|
<li><a rel="nofollow" class="external text" href="https://github.com/makelinux/examples/blob/master/cpp/features.cpp">试出编译器特性的源码</a></li>
|
|
</ul>
|
|
</div>
|
|
<div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|