blob: 322c49a6147145a1774725b0d6a78e2138d258ee [file] [log] [blame]
Richard Smith827cdbc2016-09-28 21:01:37 +00001<!DOCTYPE html>
Cedric Venet3d658642009-02-14 20:20:19 +00002<html>
3<head>
Richard Smith827cdbc2016-09-28 21:01:37 +00004 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
Richard Smith86f8aca2017-07-15 15:42:36 +00005 <title>Clang - C++17, C++14, C++11 and C++98 Status</title>
Gabor Greif70f2a042009-02-25 15:22:45 +00006 <link type="text/css" rel="stylesheet" href="menu.css">
7 <link type="text/css" rel="stylesheet" href="content.css">
Cedric Venet3d658642009-02-14 20:20:19 +00008 <style type="text/css">
Michael J. Spencer45b636a2011-11-02 06:29:37 +00009 .none { background-color: #FFCCCC }
Richard Smithfe596352013-05-04 07:02:10 +000010 .partial { background-color: #FFE0B0 }
Richard Smith65967ec2012-02-14 22:39:23 +000011 .svn { background-color: #FFFF99 }
Michael J. Spencer45b636a2011-11-02 06:29:37 +000012 .full { background-color: #CCFF99 }
Richard Smith15dcec72012-03-11 03:06:00 +000013 .na { background-color: #DDDDDD }
Richard Smith23ba1d52017-08-30 23:10:31 +000014 :target { background-color: #FFFFBB; outline: #DDDD55 solid thin; }
Benjamin Kramer8398bdb2011-11-05 10:11:36 +000015 th { background-color: #FFDDAA }
Richard Smithf906b2c2016-07-14 00:14:59 +000016 td { vertical-align: middle }
Richard Smithaeba8312017-07-06 00:29:13 +000017 tt { white-space: nowrap }
Cedric Venet3d658642009-02-14 20:20:19 +000018 </style>
19</head>
20<body>
21
22<!--#include virtual="menu.html.incl"-->
23
24<div id="content">
25
26<!--*************************************************************************-->
Richard Smith20ea7e92014-06-20 20:33:10 +000027<h1>C++ Support in Clang</h1>
Cedric Venet3d658642009-02-14 20:20:19 +000028<!--*************************************************************************-->
Douglas Gregor4c9b68f2009-06-27 19:33:58 +000029<p>Last updated: $Date$</p>
Cedric Venet3d658642009-02-14 20:20:19 +000030
Richard Smithd024a292016-09-28 19:22:36 +000031<p>Clang fully implements all published ISO C++ standards (<a
32href="#cxx98">C++98 / C++03</a>, <a
33href="#cxx11">C++11</a>, and <a
34href="#cxx14">C++14</a>), and most of the upcoming <a
Richard Smith86f8aca2017-07-15 15:42:36 +000035href="#cxx17">C++17</a> standard.
Alp Toker5fe64f12013-12-06 06:35:49 +000036
Richard Smithefdefe42013-12-09 08:52:23 +000037<p>The Clang community is continually striving to improve C++ standards
Alp Toker5fe64f12013-12-06 06:35:49 +000038compliance between releases by submitting and tracking <a
39href="cxx_dr_status.html">C++ Defect Reports</a> and implementing resolutions
40as they become available.</p>
41
42<p>Experimental work is also under way to implement <a href="#ts">C++ Technical
43Specifications</a> that will help drive the future of the C++ programming
44language.</p>
45
Sylvestre Ledru22be9122018-09-22 07:41:09 +000046<p>The <a href="https://bugs.llvm.org/">LLVM bug tracker</a> contains Clang
Richard Smithefdefe42013-12-09 08:52:23 +000047C++ components that track known bugs with Clang's language conformance in
48each language mode.</p>
49
Richard Smith1e409d82012-02-24 18:42:08 +000050<h2 id="cxx98">C++98 implementation status</h2>
51
Alp Toker5fe64f12013-12-06 06:35:49 +000052<p>Clang implements all of the ISO C++ 1998 standard
Douglas Gregor8c327082011-07-21 17:46:15 +000053 (including the defects addressed in the ISO C++ 2003 standard)
Richard Smith6d344ec2014-06-22 16:00:05 +000054 except for <tt>export</tt> (which was removed in C++11).
Douglas Gregor57f1a002010-02-05 23:51:14 +000055
Richard Smith1e409d82012-02-24 18:42:08 +000056<h2 id="cxx11">C++11 implementation status</h2>
Chris Lattner900e32d2010-05-21 20:59:40 +000057
Richard Smith827cdbc2016-09-28 21:01:37 +000058<p>Clang 3.3 and later implement all of the <a
Richard Smith22fe1e62018-03-17 14:28:47 +000059 href="http://www.iso.org/standard/50372.html">ISO
Richard Smith827cdbc2016-09-28 21:01:37 +000060 C++ 2011 standard</a>.
Chris Lattner900e32d2010-05-21 20:59:40 +000061
Richard Smith11fd5b12013-03-10 00:11:00 +000062<p>By default, Clang builds C++ code according to the C++98 standard, with many
63C++11 features accepted as extensions. You can use Clang in C++11 mode with the
64<code>-std=c++11</code> option. Clang's C++11 mode can be used
Richard Smithd024a292016-09-28 19:22:36 +000065with <a href="http://libcxx.llvm.org/">libc++</a> or with gcc's libstdc++.
Jeffrey Yasskin46ba01a2011-03-29 22:27:50 +000066
Richard Smith827cdbc2016-09-28 21:01:37 +000067<details>
68<summary>List of features and minimum Clang version with support</summary>
69
Cedric Venet3d658642009-02-14 20:20:19 +000070<table width="689" border="1" cellspacing="0">
Douglas Gregor43ac6d02011-10-14 23:21:49 +000071 <tr>
Benjamin Kramer8398bdb2011-11-05 10:11:36 +000072 <th>Language Feature</th>
Richard Smith1e409d82012-02-24 18:42:08 +000073 <th>C++11 Proposal</th>
Benjamin Kramer8398bdb2011-11-05 10:11:36 +000074 <th>Available in Clang?</th>
Douglas Gregor43ac6d02011-10-14 23:21:49 +000075 </tr>
76 <tr>
Richard Smith30934c82019-07-20 08:20:54 +000077 <td rowspan="2">Rvalue references</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +000078 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html">N2118</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +000079 <td class="full" align="center">Clang 2.9</td>
Richard Smith30934c82019-07-20 08:20:54 +000080 <tr> <!-- from Kona 2019-->
81 <td><a href="http://wg21.link/p1825r0">P1825R0</a> (<a href="#dr">DR</a>)</td>
82 <td class="none" align="center">No</td>
83 </tr>
Douglas Gregor43ac6d02011-10-14 23:21:49 +000084 </tr>
85 <tr>
86 <td>&nbsp;&nbsp;&nbsp;&nbsp;Rvalue references for <code>*this</code></td>
87 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm">N2439</a></td>
Benjamin Kramer8398bdb2011-11-05 10:11:36 +000088 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +000089 </tr>
90 <tr>
91 <td>Initialization of class objects by rvalues</td>
92 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html">N1610</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +000093 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +000094 </tr>
95 <tr>
96 <td>Non-static data member initializers</td>
97 <td><a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm">N2756</a></td>
Benjamin Kramer8398bdb2011-11-05 10:11:36 +000098 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +000099 </tr>
100 <tr>
101 <td>Variadic templates</td>
102 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf">N2242</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000103 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000104 </tr>
105 <tr>
106 <td>&nbsp;&nbsp;&nbsp;&nbsp;Extending variadic template template parameters</td>
107 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf">N2555</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000108 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000109 </tr>
110 <tr>
Richard Smithac2c4bf2019-02-23 21:06:25 +0000111 <td rowspan="2">Initializer lists</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000112 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm">N2672</a></td>
Richard Smith24fd6c82012-05-23 01:38:11 +0000113 <td class="full" align="center">Clang 3.1</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000114 </tr>
Richard Smithac2c4bf2019-02-23 21:06:25 +0000115 <tr> <!-- from Kona 2019-->
116 <td><a href="http://wg21.link/p1009r2">P1009R2</a> (<a href="#dr">DR</a>)</td>
Richard Smith796b29c2019-09-20 18:09:05 +0000117 <td class="full" align="center">Clang 9</td>
Richard Smithac2c4bf2019-02-23 21:06:25 +0000118 </tr>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000119 <tr>
120 <td>Static assertions</td>
121 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html">N1720</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000122 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000123 </tr>
124 <tr>
125 <td><code>auto</code>-typed variables</td>
126 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf">N1984</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000127 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000128 </tr>
129 <tr>
130 <td>&nbsp;&nbsp;&nbsp;&nbsp;Multi-declarator <code>auto</code></td>
131 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf">N1737</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000132 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000133 </tr>
134 <tr>
135 <td>&nbsp;&nbsp;&nbsp;&nbsp;Removal of auto as a storage-class specifier</td>
136 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm">N2546</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000137 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000138 </tr>
139 <tr>
140 <td>&nbsp;&nbsp;&nbsp;&nbsp;New function declarator syntax</td>
141 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm">N2541</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000142 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000143 </tr>
144 <tr>
Richard Smith22fe1e62018-03-17 14:28:47 +0000145 <td rowspan="2">Lambda expressions</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000146 <td><a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf">N2927</a></td>
Richard Smith24fd6c82012-05-23 01:38:11 +0000147 <td class="full" align="center">Clang 3.1</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000148 </tr>
Richard Smith22fe1e62018-03-17 14:28:47 +0000149 <tr>
150 <!-- from Albuquerque 2017 -->
151 <td><a href="http://wg21.link/p0588r1">P0588R1</a> (<a href="#dr">DR</a>)</td>
152 <td class="none" align="center">No</td>
153 </tr>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000154 <tr>
155 <td>Declared type of an expression</td>
156 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf">N2343</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000157 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000158 </tr>
159 <tr>
Douglas Gregor316551f2012-04-10 20:00:33 +0000160 <td>&nbsp;&nbsp;&nbsp;&nbsp;Incomplete return types</td>
161 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf">N3276</a></td>
Richard Smith24fd6c82012-05-23 01:38:11 +0000162 <td class="full" align="center">Clang 3.1</td>
Douglas Gregor316551f2012-04-10 20:00:33 +0000163 </tr>
164 <tr>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000165 <td>Right angle brackets</td>
166 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html">N1757</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000167 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000168 </tr>
169 <tr>
170 <td>Default template arguments for function templates</td>
171 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226">DR226</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000172 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000173 </tr>
174 <tr>
175 <td>Solving the SFINAE problem for expressions</td>
176 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html">DR339</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000177 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000178 </tr>
179 <tr>
180 <td>Alias templates</td>
181 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf">N2258</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000182 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000183 </tr>
184 <tr>
185 <td>Extern templates</td>
186 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm">N1987</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000187 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000188 </tr>
189 <tr>
190 <td>Null pointer constant</td>
191 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf">N2431</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000192 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000193 </tr>
194 <tr>
195 <td>Strongly-typed enums</td>
196 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf">N2347</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000197 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000198 </tr>
199 <tr>
200 <td>Forward declarations for enums</td>
Richard Smithf1c66b42012-03-14 23:13:10 +0000201 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf">N2764</a>
202 <br><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1206">DR1206</a></td>
Richard Smith24fd6c82012-05-23 01:38:11 +0000203 <td class="full" align="center">Clang 3.1</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000204 </tr>
205 <tr>
Richard Smithf16bd492014-01-17 00:11:48 +0000206 <td>Standardized attribute syntax</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000207 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf">N2761</a></td>
Richard Smith02344ac2013-06-17 23:54:23 +0000208 <td class="full" align="center">Clang 3.3 <a href="#n2761">(1)</a></td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000209 </tr>
210 <tr>
Richard Smith22fe1e62018-03-17 14:28:47 +0000211 <td rowspan="2">Generalized constant expressions</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000212 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf">N2235</a></td>
Richard Smith24fd6c82012-05-23 01:38:11 +0000213 <td class="full" align="center">Clang 3.1</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000214 </tr>
Richard Smith22fe1e62018-03-17 14:28:47 +0000215 <tr>
216 <!-- from Albuquerque 2017 -->
217 <td><a href="http://wg21.link/p0859r0">P0859R0</a> (<a href="#dr">DR</a>)</td>
Richard Smith27b6ecd2019-05-04 00:23:18 +0000218 <td class="full" align="center">Clang 8</td>
Richard Smith22fe1e62018-03-17 14:28:47 +0000219 </tr>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000220 <tr>
221 <td>Alignment support</td>
222 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf">N2341</a></td>
Richard Smith02344ac2013-06-17 23:54:23 +0000223 <td class="full" align="center">Clang 3.3</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000224 </tr>
Richard Smithf2598b52014-03-14 21:21:24 +0000225 <tr>
226 <td>Conditionally-support behavior</td>
227 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1627.pdf">N1627</a></td>
228 <td class="full" align="center">Clang 2.9</td>
229 </tr>
230 <tr>
231 <td>Changing undefined behavior into diagnosable errors</td>
232 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1727.pdf">N1727</a></td>
233 <td class="full" align="center">Clang 2.9</td>
234 </tr>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000235 <tr>
236 <td>Delegating constructors</td>
237 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf">N1986</a></td>
Benjamin Kramer8398bdb2011-11-05 10:11:36 +0000238 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000239 </tr>
240 <tr>
Richard Smith22fe1e62018-03-17 14:28:47 +0000241 <td rowspan="2">Inheriting constructors</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000242 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm">N2540</a></td>
Richard Smith02344ac2013-06-17 23:54:23 +0000243 <td class="full" align="center">Clang 3.3</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000244 </tr>
Richard Smith22fe1e62018-03-17 14:28:47 +0000245 <tr>
246 <!-- from Kona 2015 -->
247 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0136r1.html">P0136R1</a> (<a href="#dr">DR</a>)</td>
248 <td class="full" align="center">Clang 3.9</td>
249 </tr>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000250 <tr>
251 <td>Explicit conversion operators</td>
252 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf">N2437</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000253 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000254 </tr>
255 <tr>
256 <td>New character types</td>
257 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html">N2249</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000258 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000259 </tr>
260 <tr>
261 <td>Unicode string literals</td>
262 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm">N2442</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000263 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000264 </tr>
265 <tr>
266 <td>Raw string literals</td>
267 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm">N2442</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000268 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000269 </tr>
270 <tr>
Richard Smith26b75c02012-03-09 22:27:51 +0000271 <td>Universal character names in literals</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000272 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html">N2170</a></td>
Richard Smith24fd6c82012-05-23 01:38:11 +0000273 <td class="full" align="center">Clang 3.1</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000274 </tr>
275 <tr>
276 <td>User-defined literals</td>
277 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf">N2765</a></td>
Richard Smith24fd6c82012-05-23 01:38:11 +0000278 <td class="full" align="center">Clang 3.1</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000279 </tr>
280 <tr>
281 <td>Standard Layout Types</td>
282 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm">N2342</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000283 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000284 </tr>
285 <tr>
Richard Smithac2c4bf2019-02-23 21:06:25 +0000286 <td rowspan="2">Defaulted functions</td>
Douglas Gregor26bae202011-10-28 19:44:09 +0000287 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm">N2346</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000288 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor26bae202011-10-28 19:44:09 +0000289 </tr>
Richard Smithac2c4bf2019-02-23 21:06:25 +0000290 <tr> <!-- from Kona 2019-->
291 <td><a href="http://wg21.link/p1286r2">P1286R2</a> (<a href="#dr">DR</a>)</td>
Richard Smith796b29c2019-09-20 18:09:05 +0000292 <td class="full" align="center">Clang 9</td>
Richard Smithac2c4bf2019-02-23 21:06:25 +0000293 </tr>
Douglas Gregor26bae202011-10-28 19:44:09 +0000294 <tr>
295 <td>Deleted functions</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000296 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm">N2346</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000297 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000298 </tr>
299 <tr>
300 <td>Extended friend declarations</td>
301 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf">N1791</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000302 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000303 </tr>
304 <tr>
305 <td>Extending <code>sizeof</code></td>
Richard Smitha5ec58d2012-02-24 18:37:14 +0000306 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html">N2253</a>
307 <br><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#850">DR850</a></td>
Richard Smith24fd6c82012-05-23 01:38:11 +0000308 <td class="full" align="center">Clang 3.1</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000309 </tr>
310 <tr>
311 <td>Inline namespaces</td>
312 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm">N2535</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000313 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000314 </tr>
315 <tr>
316 <td>Unrestricted unions</td>
317 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf">N2544</a></td>
Richard Smith24fd6c82012-05-23 01:38:11 +0000318 <td class="full" align="center">Clang 3.1</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000319 </tr>
320 <tr>
321 <td>Local and unnamed types as template arguments</td>
322 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm">N2657</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000323 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000324 </tr>
325 <tr>
Richard Smith22fe1e62018-03-17 14:28:47 +0000326 <td rowspan="2">Range-based for</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000327 <td><a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html">N2930</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000328 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000329 </tr>
Richard Smith22fe1e62018-03-17 14:28:47 +0000330 <tr>
331 <!-- from Jacksonville 2018 -->
332 <td><a href="http://wg21.link/p0962r1">P0962R1</a> (<a href="#dr">DR</a>)</td>
Richard Smith27b6ecd2019-05-04 00:23:18 +0000333 <td class="full" align="center">Clang 8</td>
Richard Smith22fe1e62018-03-17 14:28:47 +0000334 </tr>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000335 <tr>
336 <td>Explicit virtual overrides</td>
337 <td><a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm">N2928</a>
Richard Smitha5ec58d2012-02-24 18:37:14 +0000338 <br><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm">N3206</a>
339 <br><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm">N3272</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000340 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000341 </tr>
342 <tr>
343 <td>Minimal support for garbage collection and reachability-based leak detection</td>
344 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm">N2670</a></td>
Richard Smithccccadd2014-03-14 20:26:09 +0000345 <td class="na" align="center">N/A <a href="#n2670">(2)</a></td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000346 </tr>
347 <tr>
348 <td>Allowing move constructors to throw [noexcept]</td>
David Blaikieb09a33c2011-11-02 15:13:40 +0000349 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html">N3050</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000350 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000351 </tr>
352 <tr>
353 <td>Defining move special member functions</td>
David Blaikieb09a33c2011-11-02 15:13:40 +0000354 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html">N3053</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000355 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000356 </tr>
Cedric Venet3d658642009-02-14 20:20:19 +0000357
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000358 <tr class="separator">
Benjamin Kramer8398bdb2011-11-05 10:11:36 +0000359 <th align="center" colspan="3">Concurrency</th>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000360 </tr>
361 <tr>
362 <td>Sequence points</td>
363 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html">N2239</a></td>
Richard Smith02344ac2013-06-17 23:54:23 +0000364 <td class="full" align="center">Clang 3.3</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000365 </tr>
366 <tr>
367 <td>Atomic operations</td>
368 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html">N2427</a></td>
Richard Smith24fd6c82012-05-23 01:38:11 +0000369 <td class="full" align="center">Clang 3.1</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000370 </tr>
371 <tr>
372 <td>Strong Compare and Exchange</td>
373 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2748.html">N2748</a></td>
Richard Smithccccadd2014-03-14 20:26:09 +0000374 <td class="full" align="center">Clang 3.1 <a href="#n2748">(3)</a></td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000375 </tr>
376 <tr>
377 <td>Bidirectional Fences</td>
378 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm">N2752</a></td>
Richard Smith24fd6c82012-05-23 01:38:11 +0000379 <td class="full" align="center">Clang 3.1</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000380 </tr>
Douglas Gregor08765a92010-12-21 05:43:31 +0000381
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000382 <tr>
383 <td>Memory model</td>
384 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm">N2429</a></td>
Richard Smith52a92502013-01-29 04:55:18 +0000385 <td class="full" align="center">Clang 3.2</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000386 </tr>
387 <tr>
388 <td>Data-dependency ordering: atomics and memory model</td>
389 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm">N2664</a></td>
Richard Smithccccadd2014-03-14 20:26:09 +0000390 <td class="full" align="center">Clang 3.2 <a href="#n2664">(4)</a></td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000391 </tr>
392 <tr>
393 <td>Propagating exceptions</td>
394 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html">N2179</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000395 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000396 </tr>
397 <tr>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000398 <td>Allow atomics use in signal handlers</td>
399 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm">N2547</a></td>
Richard Smith24fd6c82012-05-23 01:38:11 +0000400 <td class="full" align="center">Clang 3.1</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000401 </tr>
402 <tr>
403 <td>Thread-local storage</td>
404 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm">N2659</a></td>
Richard Smith49932682016-02-09 22:48:14 +0000405 <td class="full" align="center">Clang 3.3 <a href="#n2659">(5)</a></td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000406 </tr>
407 <tr>
408 <td>Dynamic initialization and destruction with concurrency</td>
409 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm">N2660</a></td>
Richard Smith14416322013-02-22 09:31:00 +0000410 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000411 </tr>
Cedric Venet3d658642009-02-14 20:20:19 +0000412
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000413 <tr class="separator">
Richard Smith1e409d82012-02-24 18:42:08 +0000414 <th align="center" colspan="3">C99 Features in C++11</th>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000415 </tr>
416 <tr>
417 <td><code>__func__</code> predefined identifier</td>
418 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm">N2340</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000419 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000420 </tr>
421 <tr>
422 <td>C99 preprocessor</td>
423 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm">N1653</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000424 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000425 </tr>
426 <tr>
427 <td><code>long long</code></td>
428 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf">N1811</a></td>
Michael J. Spencer45b636a2011-11-02 06:29:37 +0000429 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000430 </tr>
431 <tr>
432 <td>Extended integral types</td>
433 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf">N1988</a></td>
Richard Smith49932682016-02-09 22:48:14 +0000434 <td class="na" align="center">N/A <a href="#n1988">(6)</a></td>
Douglas Gregor43ac6d02011-10-14 23:21:49 +0000435 </tr>
Cedric Venet3d658642009-02-14 20:20:19 +0000436</table>
Richard Smith896e42d2013-03-12 19:56:09 +0000437
438<p>
439<span id="n2761">(1): The <code>[[carries_dependency]]</code> attribute
Richard Smithf72663f2013-03-18 21:57:52 +0000440has no effect.</span><br>
Richard Smithccccadd2014-03-14 20:26:09 +0000441<span id="n2670">(2): No compiler changes are required for an implementation
442such as Clang that does not provide garbage collection.</span><br>
443<span id="n2748">(3): All compare-exchange operations are emitted as
Richard Smithf72663f2013-03-18 21:57:52 +0000444strong compare-exchanges.</span><br>
Richard Smithccccadd2014-03-14 20:26:09 +0000445<span id="n2664">(4): <code>memory_order_consume</code> is lowered to
Richard Smithf72663f2013-03-18 21:57:52 +0000446<code>memory_order_acquire</code>.</span><br>
Richard Smith49932682016-02-09 22:48:14 +0000447<span id="n2659">(5): <code>thread_local</code> support
448requires a C++ runtime library providing <code>__cxa_thread_atexit</code>, such
449as <a href="http://libcxxabi.llvm.org">libc++abi</a> 3.6 or later,
450or libsupc++ 4.8 or later.</span><br>
451<span id="n1988">(6): No compiler changes are required for an implementation
Richard Smithccccadd2014-03-14 20:26:09 +0000452such as Clang that does not provide any extended integer types.
453<code>__int128</code> is not treated as an extended integer type,
454because changing <code>intmax_t</code> would be an ABI-incompatible
455change.</span>
Richard Smith896e42d2013-03-12 19:56:09 +0000456</p>
Richard Smith827cdbc2016-09-28 21:01:37 +0000457</details>
Richard Smith896e42d2013-03-12 19:56:09 +0000458
Richard Smith4b79c4d2014-08-31 04:17:48 +0000459<h2 id="cxx14">C++14 implementation status</h2>
Richard Smithaff7d352013-04-19 17:27:48 +0000460
Richard Smithd024a292016-09-28 19:22:36 +0000461<p>Clang 3.4 and later implement all of the <a
Richard Smith22fe1e62018-03-17 14:28:47 +0000462 href="http://www.iso.org/standard/64029.html">ISO
Richard Smith827cdbc2016-09-28 21:01:37 +0000463 C++ 2014 standard</a>.
Richard Smithaff7d352013-04-19 17:27:48 +0000464
Richard Smith4b79c4d2014-08-31 04:17:48 +0000465<p>You can use Clang in C++14 mode with the <code>-std=c++14</code> option
Richard Smith8128cd22014-08-31 04:18:54 +0000466(use <code>-std=c++1y</code> in Clang 3.4 and earlier).</p>
Richard Smith7dc88642013-04-20 13:22:50 +0000467
Richard Smith827cdbc2016-09-28 21:01:37 +0000468<details>
469<summary>List of features and minimum Clang version with support</summary>
470
Richard Smithaff7d352013-04-19 17:27:48 +0000471<table width="689" border="1" cellspacing="0">
472 <tr>
473 <th>Language Feature</th>
Richard Smith4b79c4d2014-08-31 04:17:48 +0000474 <th>C++14 Proposal</th>
Richard Smithaff7d352013-04-19 17:27:48 +0000475 <th>Available in Clang?</th>
476 </tr>
477 <tr>
478 <td>Tweak to certain C++ contextual conversions</td>
479 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3323.pdf">N3323</a></td>
Richard Smith29175472014-02-03 06:58:08 +0000480 <td class="full" align="center">Clang 3.4</td>
Richard Smithaff7d352013-04-19 17:27:48 +0000481 </tr>
482 <tr>
Richard Smith408de432013-04-20 12:44:32 +0000483 <td>Binary literals</td>
Richard Smithaff7d352013-04-19 17:27:48 +0000484 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3472.pdf">N3472</a></td>
Benjamin Kramer5252a7c2015-02-09 11:48:43 +0000485 <td class="full" align="center">Clang 2.9</td>
Richard Smithaff7d352013-04-19 17:27:48 +0000486 </tr>
487 <tr>
Richard Smitha2c36462013-04-26 16:15:35 +0000488 <td>decltype(auto)</td>
Richard Smith6f616292013-05-09 18:53:17 +0000489 <td rowspan=2 style="vertical-align:middle"><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3638.html">N3638</a></td>
Richard Smith02344ac2013-06-17 23:54:23 +0000490 <td class="full" align="center">Clang 3.3</td>
Richard Smitha2c36462013-04-26 16:15:35 +0000491 </tr>
492 <tr>
Richard Smith96ba7c72013-04-20 12:47:36 +0000493 <td>Return type deduction for normal functions</td>
Richard Smith29175472014-02-03 06:58:08 +0000494 <td class="full" align="center">Clang 3.4</td>
Richard Smith96ba7c72013-04-20 12:47:36 +0000495 </tr>
Richard Smith408de432013-04-20 12:44:32 +0000496 <tr>
Richard Smith96ba7c72013-04-20 12:47:36 +0000497 <td>Initialized lambda captures</td>
Richard Smith6f616292013-05-09 18:53:17 +0000498 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3648.html">N3648</a></td>
Richard Smith29175472014-02-03 06:58:08 +0000499 <td class="full" align="center">Clang 3.4</td>
Richard Smithaff7d352013-04-19 17:27:48 +0000500 </tr>
501 <tr>
Richard Smithbb2d3782013-04-20 12:58:57 +0000502 <td>Generic lambdas</td>
Richard Smith6f616292013-05-09 18:53:17 +0000503 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3649.html">N3649</a></td>
Richard Smith29175472014-02-03 06:58:08 +0000504 <td class="full" align="center">Clang 3.4</td>
Richard Smithaff7d352013-04-19 17:27:48 +0000505 </tr>
506 <tr>
Richard Smithbb2d3782013-04-20 12:58:57 +0000507 <td>Variable templates</td>
Richard Smith6f616292013-05-09 18:53:17 +0000508 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3651.pdf">N3651</a></td>
Richard Smith29175472014-02-03 06:58:08 +0000509 <td class="full" align="center">Clang 3.4</td>
Richard Smithaff7d352013-04-19 17:27:48 +0000510 </tr>
511 <tr>
Richard Smith05a73f62013-04-20 12:49:36 +0000512 <td>Relaxing requirements on constexpr functions</td>
Richard Smith6f616292013-05-09 18:53:17 +0000513 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3652.html">N3652</a></td>
Richard Smith29175472014-02-03 06:58:08 +0000514 <td class="full" align="center">Clang 3.4</td>
Richard Smithaff7d352013-04-19 17:27:48 +0000515 </tr>
516 <tr>
Richard Smith96ba7c72013-04-20 12:47:36 +0000517 <td>Member initializers and aggregates</td>
Richard Smith6f616292013-05-09 18:53:17 +0000518 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3653.html">N3653</a></td>
Richard Smith02344ac2013-06-17 23:54:23 +0000519 <td class="full" align="center">Clang 3.3</td>
Richard Smithaff7d352013-04-19 17:27:48 +0000520 </tr>
Richard Smithaff7d352013-04-19 17:27:48 +0000521 <tr>
Richard Smith8e95e302013-04-20 12:57:49 +0000522 <td>Clarifying memory allocation</td>
Richard Smith6f616292013-05-09 18:53:17 +0000523 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3664.html">N3664</a></td>
Richard Smith29175472014-02-03 06:58:08 +0000524 <td class="full" align="center">Clang 3.4</td>
Richard Smithaff7d352013-04-19 17:27:48 +0000525 </tr>
Richard Smithf9d2ccd2013-09-27 19:11:33 +0000526 <tr>
527 <td><tt>[[deprecated]]</tt> attribute</td>
528 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3760.html">N3760</a></td>
Richard Smith29175472014-02-03 06:58:08 +0000529 <td class="full" align="center">Clang 3.4</td>
Richard Smithf9d2ccd2013-09-27 19:11:33 +0000530 </tr>
531 <tr>
532 <td>Single quotation mark as digit separator</td>
Richard Smith88407bb2013-11-05 08:27:00 +0000533 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3781.pdf">N3781</a></td>
Richard Smith29175472014-02-03 06:58:08 +0000534 <td class="full" align="center">Clang 3.4</td>
Richard Smithf9d2ccd2013-09-27 19:11:33 +0000535 </tr>
536 <tr>
Benjamin Kramereb263e82013-09-27 19:35:09 +0000537 <td>C++ Sized Deallocation</td>
Richard Smith88407bb2013-11-05 08:27:00 +0000538 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3778.html">N3778</a></td>
Richard Smith49932682016-02-09 22:48:14 +0000539 <td class="full" align="center">Clang 3.4 <a href="#n3778">(7)</a></td>
Richard Smithf9d2ccd2013-09-27 19:11:33 +0000540 </tr>
Richard Smithaff7d352013-04-19 17:27:48 +0000541</table>
Reid Kleckner79bcca22015-03-20 00:31:07 +0000542
Larisse Voufo9d2b30b2015-02-19 04:34:13 +0000543<p>
Richard Smith49932682016-02-09 22:48:14 +0000544<span id="n3778">(7): In Clang 3.7 and later, sized deallocation is only enabled
Reid Kleckner79bcca22015-03-20 00:31:07 +0000545if the user passes the <code>-fsized-deallocation</code> flag. The user must
546supply definitions of the sized deallocation functions, either by providing them
547explicitly or by using a C++ standard library that does. <code>libstdc++</code>
548added these functions in version 5.0, and <code>libc++</code> added them in
549version 3.7.
Larisse Voufo9d2b30b2015-02-19 04:34:13 +0000550</span>
551</p>
Richard Smith827cdbc2016-09-28 21:01:37 +0000552</details>
Richard Smithaff7d352013-04-19 17:27:48 +0000553
Richard Smith86f8aca2017-07-15 15:42:36 +0000554<h2 id="cxx17">C++17 implementation status</h2>
Richard Smith7dae9292013-11-07 06:41:26 +0000555
Richard Smith22fe1e62018-03-17 14:28:47 +0000556<p>Clang 5 and later implement all the features of the
557<a href="https://www.iso.org/standard/68564.html">ISO C++ 2017 standard</a>.
Richard Smith20ea7e92014-06-20 20:33:10 +0000558
Richard Smith23ba1d52017-08-30 23:10:31 +0000559<p>You can use Clang in C++17 mode with the <code>-std=c++17</code> option
560(use <code>-std=c++1z</code> in Clang 4 and earlier).</p>
Richard Smith20ea7e92014-06-20 20:33:10 +0000561
Richard Smith827cdbc2016-09-28 21:01:37 +0000562<details open>
563<summary>List of features and minimum Clang version with support</summary>
564
Richard Smith20ea7e92014-06-20 20:33:10 +0000565<table width="689" border="1" cellspacing="0">
566 <tr>
567 <th>Language Feature</th>
Richard Smith86f8aca2017-07-15 15:42:36 +0000568 <th>C++17 Proposal</th>
Richard Smith20ea7e92014-06-20 20:33:10 +0000569 <th>Available in Clang?</th>
570 </tr>
Richard Smithbb0cd362016-11-11 22:48:43 +0000571 <!-- Issaquah 2014 papers -->
Richard Smith20ea7e92014-06-20 20:33:10 +0000572 <tr>
573 <td><tt>static_assert</tt> with no message</td>
574 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3928.pdf">N3928</a></td>
Richard Smith1e0b8692014-09-11 17:30:32 +0000575 <td class="full" align="center">Clang 3.5</td>
Richard Smith20ea7e92014-06-20 20:33:10 +0000576 </tr>
Richard Smith4617a9d2014-11-08 05:07:16 +0000577 <!-- Rapperswil papers -->
Richard Smith20ea7e92014-06-20 20:33:10 +0000578 <tr>
579 <td>Disabling trigraph expansion by default</td>
Richard Smithaa45eba2014-11-26 03:26:53 +0000580 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4086.html">N4086</a></td>
Richard Smith1e0b8692014-09-11 17:30:32 +0000581 <td class="full" align="center">Clang 3.5</td>
Richard Smith20ea7e92014-06-20 20:33:10 +0000582 </tr>
Richard Smitha379fcb2014-11-27 01:54:27 +0000583 <!--
Richard Smith20ea7e92014-06-20 20:33:10 +0000584 <tr>
Richard Smith86f8aca2017-07-15 15:42:36 +0000585 <td rowspan="2">Terse range-based for loops (removed from C++17)</td>
Richard Smitha379fcb2014-11-27 01:54:27 +0000586 <td rowspan="2"><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3994.htm">N3994</a></td>
587 <td class="none" align="center">Clang 3.5: Yes</td>
Richard Smith20ea7e92014-06-20 20:33:10 +0000588 </tr>
589 <tr>
Richard Smitha379fcb2014-11-27 01:54:27 +0000590 <td class="svn" align="center">SVN: No</td>
591 </tr>
592 -->
593 <tr>
Richard Smith20ea7e92014-06-20 20:33:10 +0000594 <td><tt>typename</tt> in a template template parameter</td>
595 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4051.html">N4051</a></td>
Richard Smith1e0b8692014-09-11 17:30:32 +0000596 <td class="full" align="center">Clang 3.5</td>
Richard Smith20ea7e92014-06-20 20:33:10 +0000597 </tr>
Richard Smithaa45eba2014-11-26 03:26:53 +0000598 <tr>
599 <td>New <tt>auto</tt> rules for direct-list-initialization
600 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3922.html">N3922</a></td>
Richard Smith9c6d6b52016-03-20 10:37:12 +0000601 <td class="full" align="center">Clang 3.8 <a href="#n3922">(8)</a></td>
Richard Smithaa45eba2014-11-26 03:26:53 +0000602 </tr>
Richard Smith4617a9d2014-11-08 05:07:16 +0000603 <!-- Urbana papers -->
604 <tr>
Richard Smithe7ba0f52016-03-04 21:01:14 +0000605 <td rowspan="2">Fold expressions</td>
Benjamin Kramer5252a7c2015-02-09 11:48:43 +0000606 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4295.html">N4295</a></td>
Richard Smith1fd6dc62015-11-11 01:36:17 +0000607 <td class="full" align="center">Clang 3.6</td>
Richard Smith9443d042014-11-08 06:08:42 +0000608 </tr>
Richard Smithe7ba0f52016-03-04 21:01:14 +0000609 <tr> <!-- from Jacksonville -->
610 <td><a href="http://wg21.link/p0036r0">P0036R0</a></td>
Richard Smith6197d012016-08-15 02:47:23 +0000611 <td class="full" align="center">Clang 3.9</td>
Richard Smithe7ba0f52016-03-04 21:01:14 +0000612 </tr>
Richard Smith9443d042014-11-08 06:08:42 +0000613 <tr>
614 <td><tt>u8</tt> character literals</td>
Benjamin Kramer5252a7c2015-02-09 11:48:43 +0000615 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4267.html">N4267</a></td>
Richard Smith1fd6dc62015-11-11 01:36:17 +0000616 <td class="full" align="center">Clang 3.6</td>
Richard Smith4617a9d2014-11-08 05:07:16 +0000617 </tr>
Richard Smithd331bec2014-11-08 05:37:34 +0000618 <tr>
619 <td>Nested namespace definition</td>
Benjamin Kramer5252a7c2015-02-09 11:48:43 +0000620 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4230.html">N4230</a></td>
Richard Smith1fd6dc62015-11-11 01:36:17 +0000621 <td class="full" align="center">Clang 3.6</td>
Richard Smithd331bec2014-11-08 05:37:34 +0000622 </tr>
Aaron Ballman079c1432014-11-08 15:33:35 +0000623 <tr>
624 <td>Attributes for namespaces and enumerators</td>
Benjamin Kramer5252a7c2015-02-09 11:48:43 +0000625 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4266.html">N4266</a></td>
Richard Smith1fd6dc62015-11-11 01:36:17 +0000626 <td class="full" align="center">Clang 3.6</td>
Aaron Ballman079c1432014-11-08 15:33:35 +0000627 </tr>
Richard Smithaa45eba2014-11-26 03:26:53 +0000628 <tr>
629 <td>Allow constant evaluation for all non-type template arguments</td>
Benjamin Kramer5252a7c2015-02-09 11:48:43 +0000630 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4268.html">N4268</a></td>
Richard Smith1fd6dc62015-11-11 01:36:17 +0000631 <td class="full" align="center">Clang 3.6</td>
Richard Smithaa45eba2014-11-26 03:26:53 +0000632 </tr>
Richard Smithf913c312015-11-05 21:41:06 +0000633 <!-- Kona papers -->
634 <tr>
635 <td>Remove deprecated <tt>register</tt> storage class</td>
636 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0001r1.html">P0001R1</a></td>
Richard Smith9c6d6b52016-03-20 10:37:12 +0000637 <td class="full" align="center">Clang 3.8</td>
Richard Smithf913c312015-11-05 21:41:06 +0000638 </tr>
639 <tr>
640 <td>Remove deprecated <tt>bool</tt> increment</td>
641 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0002r1.html">P0002R1</a></td>
Richard Smith9c6d6b52016-03-20 10:37:12 +0000642 <td class="full" align="center">Clang 3.8</td>
Richard Smithf913c312015-11-05 21:41:06 +0000643 </tr>
644 <tr>
645 <td>Make exception specifications part of the type system</td>
646 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0012r1.html">P0012R1</a></td>
Ed Schoutenc08458f2017-03-16 14:21:00 +0000647 <td class="full" align="center">Clang 4</td>
Richard Smithf913c312015-11-05 21:41:06 +0000648 </tr>
649 <tr>
Richard Smith86772782015-11-26 02:16:37 +0000650 <td><tt>__has_include</tt> in preprocessor conditionals</td>
Richard Smithf913c312015-11-05 21:41:06 +0000651 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0061.html">P0061R1</a></td>
652 <td class="full" align="center">Yes</td>
653 </tr>
Richard Smithe7ba0f52016-03-04 21:01:14 +0000654 <!-- Jacksonville papers -->
655 <tr>
656 <td><tt>[[fallthrough]]</tt> attribute</td>
657 <td><a href="http://wg21.link/p0188r1">P0188R1</a></td>
Richard Smith6197d012016-08-15 02:47:23 +0000658 <td class="full" align="center">Clang 3.9</td>
Richard Smithe7ba0f52016-03-04 21:01:14 +0000659 </tr>
660 <tr>
Richard Smith30934c82019-07-20 08:20:54 +0000661 <td rowspan="2"><tt>[[nodiscard]]</tt> attribute</td>
Richard Smithe7ba0f52016-03-04 21:01:14 +0000662 <td><a href="http://wg21.link/p0189r1">P0189R1</a></td>
Richard Smith6197d012016-08-15 02:47:23 +0000663 <td class="full" align="center">Clang 3.9</td>
Richard Smithe7ba0f52016-03-04 21:01:14 +0000664 </tr>
Richard Smith30934c82019-07-20 08:20:54 +0000665 <tr> <!-- from Cologne 2019 -->
666 <td><a href="http://wg21.link/p1771r1">P1771R1</a> (<a href="#dr">DR</a>)</td>
Richard Smith796b29c2019-09-20 18:09:05 +0000667 <td class="full" align="center">Clang 9</td>
Richard Smith30934c82019-07-20 08:20:54 +0000668 </tr>
Richard Smithe7ba0f52016-03-04 21:01:14 +0000669 <tr>
670 <td><tt>[[maybe_unused]]</tt> attribute</td>
671 <td><a href="http://wg21.link/p0212r1">P0212R1</a></td>
Richard Smith6197d012016-08-15 02:47:23 +0000672 <td class="full" align="center">Clang 3.9</td>
Richard Smithe7ba0f52016-03-04 21:01:14 +0000673 </tr>
674 <tr>
675 <td>Aggregate initialization of classes with base classes</td>
676 <td><a href="http://wg21.link/p0017r1">P0017R1</a></td>
Richard Smith6197d012016-08-15 02:47:23 +0000677 <td class="full" align="center">Clang 3.9</td>
Richard Smithe7ba0f52016-03-04 21:01:14 +0000678 </tr>
679 <tr>
680 <td><tt>constexpr</tt> lambda expressions</td>
681 <td><a href="http://wg21.link/p0170r1">P0170R1</a></td>
Richard Smith3d9068b2017-09-09 01:11:04 +0000682 <td class="full" align="center">Clang 5</td>
Richard Smithe7ba0f52016-03-04 21:01:14 +0000683 </tr>
684 <tr>
685 <td>Differing <tt>begin</tt> and <tt>end</tt> types in range-based <tt>for</tt></td>
686 <td><a href="http://wg21.link/p0184r0">P0184R0</a></td>
Richard Smith6197d012016-08-15 02:47:23 +0000687 <td class="full" align="center">Clang 3.9</td>
Richard Smithe7ba0f52016-03-04 21:01:14 +0000688 </tr>
689 <tr>
690 <td>Lambda capture of <tt>*this</tt></td>
691 <td><a href="http://wg21.link/p0018r3">P0018R3</a></td>
Richard Smith6197d012016-08-15 02:47:23 +0000692 <td class="full" align="center">Clang 3.9</td>
Richard Smithe7ba0f52016-03-04 21:01:14 +0000693 </tr>
694 <tr>
695 <td>Direct-list-initialization of <tt>enum</tt>s</td>
696 <td><a href="http://wg21.link/p0138r2">P0138R2</a></td>
Richard Smith6197d012016-08-15 02:47:23 +0000697 <td class="full" align="center">Clang 3.9</td>
Richard Smithe7ba0f52016-03-04 21:01:14 +0000698 </tr>
699 <tr>
700 <td>Hexadecimal floating-point literals</td>
701 <td><a href="http://wg21.link/p0245r1">P0245R1</a></td>
702 <td class="full" align="center">Yes</td>
703 </tr>
Richard Smith75ac0f52016-06-23 19:16:49 +0000704 <!-- Oulu papers -->
Richard Smith96fd8da2016-06-24 11:20:31 +0000705 <tr>
706 <td>Using attribute namespaces without repetition</td>
707 <td><a href="http://wg21.link/p0028r4">P0028R4</a></td>
Richard Smith6197d012016-08-15 02:47:23 +0000708 <td class="full" align="center">Clang 3.9</td>
Richard Smith96fd8da2016-06-24 11:20:31 +0000709 </tr>
710 <tr>
711 <td>Dynamic memory allocation for over-aligned data</td>
712 <td><a href="http://wg21.link/p0035r4">P0035R4</a></td>
Ed Schoutenc08458f2017-03-16 14:21:00 +0000713 <td class="full" align="center">Clang 4</td>
Richard Smith96fd8da2016-06-24 11:20:31 +0000714 </tr>
715 <tr>
Richard Smithc6698bb2018-05-30 23:30:36 +0000716 <td rowspan="4">Template argument deduction for class templates</td>
Richard Smith96fd8da2016-06-24 11:20:31 +0000717 <td><a href="http://wg21.link/p0091r3">P0091R3</a></td>
Richard Smith3d9068b2017-09-09 01:11:04 +0000718 <td rowspan="2" class="full" align="center">Clang 5</td>
Richard Smith96fd8da2016-06-24 11:20:31 +0000719 </tr>
Richard Smith32f09792017-02-09 22:47:51 +0000720 <tr> <!-- from Issaquah -->
721 <td><a href="http://wg21.link/p0512r0">P0512R0</a></td>
Richard Smith32f09792017-02-09 22:47:51 +0000722 </tr>
Richard Smith22fe1e62018-03-17 14:28:47 +0000723 <tr>
Richard Smithc6698bb2018-05-30 23:30:36 +0000724 <!-- from Kona 2017 -->
725 <td><a href="http://wg21.link/p0620r1">P0620R0</a> (<a href="#dr">DR</a>)</td>
Richard Smith16e31db2018-09-24 23:21:09 +0000726 <td class="full" align="center">Clang 7</td>
Richard Smithc6698bb2018-05-30 23:30:36 +0000727 </tr>
728 <tr>
Richard Smith22fe1e62018-03-17 14:28:47 +0000729 <!-- from Toronto 2017 -->
730 <td><a href="http://wg21.link/p0702r1">P0702R1</a> (<a href="#dr">DR</a>)</td>
Richard Smithc6698bb2018-05-30 23:30:36 +0000731 <td class="full" align="center">Clang 6</td>
Richard Smith22fe1e62018-03-17 14:28:47 +0000732 </tr>
Richard Smith96fd8da2016-06-24 11:20:31 +0000733 <tr>
Richard Smith0d0b8c02016-06-24 12:21:30 +0000734 <td>Non-type template parameters with <tt>auto</tt> type</td>
Richard Smith96fd8da2016-06-24 11:20:31 +0000735 <td><a href="http://wg21.link/p0127r2">P0127R2</a></td>
Ed Schoutenc08458f2017-03-16 14:21:00 +0000736 <td class="full" align="center">Clang 4</td>
Richard Smith96fd8da2016-06-24 11:20:31 +0000737 </tr>
738 <tr>
739 <td>Guaranteed copy elision</td>
740 <td><a href="http://wg21.link/p0135r1">P0135R1</a></td>
Ed Schoutenc08458f2017-03-16 14:21:00 +0000741 <td class="full" align="center">Clang 4</td>
Richard Smith96fd8da2016-06-24 11:20:31 +0000742 </tr>
743 <tr>
Richard Smithf906b2c2016-07-14 00:14:59 +0000744 <td rowspan=2>Stricter expression evaluation order</td>
Richard Smith96fd8da2016-06-24 11:20:31 +0000745 <td><a href="http://wg21.link/p0145r3">P0145R3</a></td>
Richard Smith22fe1e62018-03-17 14:28:47 +0000746 <td class="full" align="center" rowspan=2>Clang 4 <a href="#p0145">(9)</a></td>
Richard Smithf906b2c2016-07-14 00:14:59 +0000747 </tr>
748 <tr>
749 <td><a href="http://wg21.link/p0400r0">P0400R0</a></td>
Richard Smith96fd8da2016-06-24 11:20:31 +0000750 </tr>
751 <tr>
Richard Smith96fd8da2016-06-24 11:20:31 +0000752 <td>Requirement to ignore unknown attributes</td>
753 <td><a href="http://wg21.link/p0283r2">P0283R2</a></td>
754 <td class="full" align="center">Yes</td>
755 </tr>
Richard Smith75ac0f52016-06-23 19:16:49 +0000756 <tr>
757 <td><tt>constexpr</tt> <em>if-statement</em>s</td>
758 <td><a href="http://wg21.link/p0292r2">P0292R2</a></td>
Richard Smith6197d012016-08-15 02:47:23 +0000759 <td class="full" align="center">Clang 3.9</td>
Richard Smith75ac0f52016-06-23 19:16:49 +0000760 </tr>
Richard Smith96fd8da2016-06-24 11:20:31 +0000761 <tr>
762 <td>Inline variables</td>
763 <td><a href="http://wg21.link/p0386r2">P0386R2</a></td>
Richard Smith6197d012016-08-15 02:47:23 +0000764 <td class="full" align="center">Clang 3.9</td>
Richard Smith96fd8da2016-06-24 11:20:31 +0000765 </tr>
766 <tr>
Richard Smith22fe1e62018-03-17 14:28:47 +0000767 <td rowspan="3">Structured bindings</td>
Richard Smith96fd8da2016-06-24 11:20:31 +0000768 <td><a href="http://wg21.link/p0217r3">P0217R3</a></td>
Ed Schoutenc08458f2017-03-16 14:21:00 +0000769 <td class="full" align="center">Clang 4</td>
Richard Smith96fd8da2016-06-24 11:20:31 +0000770 </tr>
Richard Smith22fe1e62018-03-17 14:28:47 +0000771 <tr>
772 <!-- from Jacksonville 2018 -->
773 <td><a href="http://wg21.link/p0961r1">P0961R1</a> (<a href="#dr">DR</a>)</td>
Richard Smith27b6ecd2019-05-04 00:23:18 +0000774 <td class="full" align="center">Clang 8</td>
Richard Smith22fe1e62018-03-17 14:28:47 +0000775 </tr>
776 <tr>
777 <!-- from Jacksonville 2018 -->
778 <td><a href="http://wg21.link/p0969r0">P0969R0</a> (<a href="#dr">DR</a>)</td>
Richard Smith27b6ecd2019-05-04 00:23:18 +0000779 <td class="full" align="center">Clang 8</td>
Richard Smith22fe1e62018-03-17 14:28:47 +0000780 </tr>
Richard Smith96fd8da2016-06-24 11:20:31 +0000781 <tr>
Richard Smithe255c642016-06-24 14:23:32 +0000782 <td>Separate variable and condition for <tt>if</tt> and <tt>switch</tt></td>
Richard Smith96fd8da2016-06-24 11:20:31 +0000783 <td><a href="http://wg21.link/p0305r1">P0305R1</a></td>
Richard Smith6197d012016-08-15 02:47:23 +0000784 <td class="full" align="center">Clang 3.9</td>
Richard Smith96fd8da2016-06-24 11:20:31 +0000785 </tr>
Richard Smithbb0cd362016-11-11 22:48:43 +0000786 <!-- Issaquah 2016 papers -->
Richard Smithbb0cd362016-11-11 22:48:43 +0000787 <tr>
788 <td>Matching template template parameters to compatible arguments</td>
789 <td><a href="http://wg21.link/p0522r0">P0522R0</a></td>
Richard Smith22fe1e62018-03-17 14:28:47 +0000790 <td class="partial" align="center">Partial <a href="#p0522">(10)</a></td>
Richard Smithbb0cd362016-11-11 22:48:43 +0000791 </tr>
792 <tr>
793 <td>Removing deprecated dynamic exception specifications</td>
794 <td><a href="http://wg21.link/p0003r5">P0003R5</a></td>
Ed Schoutenc08458f2017-03-16 14:21:00 +0000795 <td class="full" align="center">Clang 4</td>
Richard Smithbb0cd362016-11-11 22:48:43 +0000796 </tr>
797 <tr>
798 <td>Pack expansions in <em>using-declarations</em></td>
799 <td><a href="http://wg21.link/p0195r2">P0195R2</a></td>
Ed Schoutenc08458f2017-03-16 14:21:00 +0000800 <td class="full" align="center">Clang 4</td>
Richard Smithbb0cd362016-11-11 22:48:43 +0000801 </tr>
Richard Smith20ea7e92014-06-20 20:33:10 +0000802</table>
Richard Smith7dae9292013-11-07 06:41:26 +0000803
Richard Smith1fd6dc62015-11-11 01:36:17 +0000804<p>
Richard Smith49932682016-02-09 22:48:14 +0000805<span id="n3922">(8): This is a backwards-incompatible change that is applied to
Richard Smith1fd6dc62015-11-11 01:36:17 +0000806all language versions that allow type deduction from <tt>auto</tt>
807(per the request of the C++ committee).
808In Clang 3.7, a warning is emitted for all cases that would change meaning.
Richard Smithbaf72342016-06-28 20:37:43 +0000809</span><br>
Richard Smith22fe1e62018-03-17 14:28:47 +0000810<span id="p0145">(9): Under the MS ABI, function parameters are destroyed from
Richard Smithc15b46e2016-09-29 21:30:12 +0000811left to right in the callee. As a result, function parameters in calls to
Richard Smith7da28ae2016-09-28 19:09:10 +0000812<tt>operator&lt;&lt;</tt>, <tt>operator&gt;&gt;</tt>, <tt>operator-&gt;*</tt>,
813<tt>operator&amp;&amp;</tt>, <tt>operator||</tt>, and <tt>operator,</tt>
Richard Smithc15b46e2016-09-29 21:30:12 +0000814functions using expression syntax are no longer guaranteed to be destroyed in
815reverse construction order in that ABI.
Richard Smith8b5e03a2016-11-11 23:46:25 +0000816</span><br>
Richard Smith22fe1e62018-03-17 14:28:47 +0000817<span id="p0522">(10): Despite being the resolution to a Defect Report, this
Richard Smith2faed1c2016-12-31 21:41:23 +0000818feature is disabled by default in all language versions, and can be enabled
Richard Smith462d0a72017-11-30 23:07:29 +0000819explicitly with the flag <tt>-frelaxed-template-template-args</tt> in Clang 4
820onwards.
Richard Smith71e04142017-01-13 00:57:54 +0000821The change to the standard lacks a corresponding change for template partial
822ordering, resulting in ambiguity errors for reasonable and previously-valid
823code. This issue is expected to be rectified soon.
Richard Smith5be817d2016-06-28 19:03:57 +0000824</span>
Richard Smith1fd6dc62015-11-11 01:36:17 +0000825</p>
Richard Smith827cdbc2016-09-28 21:01:37 +0000826</details>
Richard Smith1fd6dc62015-11-11 01:36:17 +0000827
Richard Smith86f8aca2017-07-15 15:42:36 +0000828<h2 id="cxx20">C++2a implementation status</h2>
829
Faisal Vali477f5792017-08-19 03:43:07 +0000830<p>Clang has <b>experimental</b> support for some proposed features of
Richard Smith86f8aca2017-07-15 15:42:36 +0000831the C++ standard following C++17, provisionally named C++2a.
832Note that support for these features may change or be removed without notice,
833as the draft C++2a standard evolves.
834
Faisal Vali477f5792017-08-19 03:43:07 +0000835<p>You can use Clang in C++2a mode with the <code>-std=c++2a</code> option.</p>
Richard Smith86f8aca2017-07-15 15:42:36 +0000836
837<details open>
838<summary>List of features and minimum Clang version with support</summary>
839
840<table width="689" border="1" cellspacing="0">
841 <tr>
842 <th>Language Feature</th>
843 <th>C++2a Proposal</th>
844 <th>Available in Clang?</th>
845 </tr>
846 <!-- Toronto 2017 papers -->
847 <tr>
848 <td>Default member initializers for bit-fields</td>
Richard Smith1283f012017-07-15 15:51:59 +0000849 <td><a href="http://wg21.link/p0683r1">P0683R1</a></td>
Richard Smithc6698bb2018-05-30 23:30:36 +0000850 <td class="full" align="center">Clang 6</td>
Richard Smith86f8aca2017-07-15 15:42:36 +0000851 </tr>
852 <tr>
853 <td><tt>const&amp;</tt>-qualified pointers to members</td>
854 <td><a href="http://wg21.link/p0704r1">P0704R1</a></td>
Richard Smithc6698bb2018-05-30 23:30:36 +0000855 <td class="full" align="center">Clang 6</td>
Richard Smith86f8aca2017-07-15 15:42:36 +0000856 </tr>
857 <tr>
858 <td>Allow <i>lambda-capture</i> <tt>[=, this]</tt></td>
859 <td><a href="http://wg21.link/p0409r2">P0409R2</a></td>
Richard Smithc6698bb2018-05-30 23:30:36 +0000860 <td class="full" align="center">Clang 6</td>
Richard Smith86f8aca2017-07-15 15:42:36 +0000861 </tr>
862 <tr>
Richard Smithb878dfd2018-06-14 00:05:28 +0000863 <td rowspan="2"><tt>__VA_OPT__</tt> for preprocessor comma elision</td>
Richard Smith86f8aca2017-07-15 15:42:36 +0000864 <td><a href="http://wg21.link/p0306r4">P0306R4</a></td>
Richard Smithc6698bb2018-05-30 23:30:36 +0000865 <td class="full" align="center">Clang 6</td>
Richard Smith86f8aca2017-07-15 15:42:36 +0000866 </tr>
Richard Smithb878dfd2018-06-14 00:05:28 +0000867 <tr> <!-- from Rapperswil -->
868 <td><a href="http://wg21.link/p1042r1">P1042R1</a></td>
Richard Smith796b29c2019-09-20 18:09:05 +0000869 <td class="full" align="center">Clang 9</td>
Richard Smithb878dfd2018-06-14 00:05:28 +0000870 </tr>
Richard Smith86f8aca2017-07-15 15:42:36 +0000871 <tr>
872 <td>Designated initializers</td>
873 <td><a href="http://wg21.link/p0329r4">P0329R4</a></td>
Richard Smith15b5fc92019-09-03 17:49:51 +0000874 <td class="svn" align="center">SVN</td>
Richard Smith86f8aca2017-07-15 15:42:36 +0000875 </tr>
876 <tr>
877 <td><i>template-parameter-list</i> for generic lambdas</td>
878 <td><a href="http://wg21.link/p0428r2">P0428R2</a></td>
Richard Smith796b29c2019-09-20 18:09:05 +0000879 <td class="full" align="center">Clang 9</td>
Richard Smith86f8aca2017-07-15 15:42:36 +0000880 </tr>
Richard Smith38ab6352017-11-11 17:54:46 +0000881 <tr id="p0734">
Richard Smith30934c82019-07-20 08:20:54 +0000882 <td rowspan="7">Concepts</td>
Richard Smith86f8aca2017-07-15 15:42:36 +0000883 <td><a href="http://wg21.link/p0734r0">P0734R0</a></td>
Richard Smith30934c82019-07-20 08:20:54 +0000884 <td rowspan="7" class="none" align="center">No</td>
Richard Smith38ab6352017-11-11 17:54:46 +0000885 </tr>
886 <tr> <!-- from Albuquerque -->
887 <td><a href="http://wg21.link/p0857r0">P0857R0</a></td>
888 </tr>
Richard Smith5a7aa712018-11-10 18:02:40 +0000889 <tr> <!-- from San Diego -->
890 <td><a href="http://wg21.link/p1084r2">P1084R2</a></td>
891 </tr>
892 <tr>
893 <td><a href="http://wg21.link/p1141r2">P1414R2</a></td>
894 </tr>
Richard Smith30934c82019-07-20 08:20:54 +0000895 <tr> <!-- from Cologne -->
896 <td><a href="http://wg21.link/p0848r3">P0848R3</a></td>
897 </tr>
898 <tr>
899 <td><a href="http://wg21.link/p1616r1">P1616R1</a></td>
900 </tr>
901 <tr>
902 <td><a href="http://wg21.link/p1452r2">P1452R2</a></td>
903 </tr>
Richard Smith38ab6352017-11-11 17:54:46 +0000904 <!-- Albuquerque papers -->
905 <tr>
906 <td>Range-based for statements with initializer</td>
907 <td><a href="http://wg21.link/p0614r1">P0614R1</a></td>
Richard Smith27b6ecd2019-05-04 00:23:18 +0000908 <td class="full" align="center">Clang 8</td>
Richard Smith38ab6352017-11-11 17:54:46 +0000909 </tr>
910 <tr>
Richard Smith38ab6352017-11-11 17:54:46 +0000911 <td>ADL and function templates that are not visible</td>
912 <td><a href="http://wg21.link/p0846r0">P0846R0</a></td>
Richard Smith796b29c2019-09-20 18:09:05 +0000913 <td class="full" align="center">Clang 9</td>
Richard Smith38ab6352017-11-11 17:54:46 +0000914 </tr>
915 <tr>
916 <td><tt>const</tt> mismatch with defaulted copy constructor</td>
917 <td><a href="http://wg21.link/p0641r2">P0641R2</a></td>
Richard Smith27b6ecd2019-05-04 00:23:18 +0000918 <td class="full" align="center">Clang 8</td>
Richard Smith38ab6352017-11-11 17:54:46 +0000919 </tr>
920 <tr>
Richard Smith30934c82019-07-20 08:20:54 +0000921 <td rowspan="6">Consistent comparison (<tt>operator&lt;=&gt;</tt>)</td>
Richard Smith38ab6352017-11-11 17:54:46 +0000922 <td><a href="http://wg21.link/p0515r3">P0515R3</a></td>
Richard Smithb878dfd2018-06-14 00:05:28 +0000923 <td rowspan="3" class="partial" align="center">Partial</td>
Richard Smith38ab6352017-11-11 17:54:46 +0000924 </tr>
Richard Smith22fe1e62018-03-17 14:28:47 +0000925 <tr> <!-- from Jacksonville -->
926 <td><a href="http://wg21.link/p0905r1">P0905R1</a></td>
927 </tr>
Richard Smithb878dfd2018-06-14 00:05:28 +0000928 <tr> <!-- from Rapperswil -->
929 <td><a href="http://wg21.link/p1120r0">P1120R0</a></td>
930 </tr>
Richard Smithac2c4bf2019-02-23 21:06:25 +0000931 <tr> <!-- from Kona 2019 -->
932 <td><a href="http://wg21.link/p1185r2">P1185R2</a></td>
Richard Smith30934c82019-07-20 08:20:54 +0000933 <td rowspan="3" class="none" align="center">No</td>
934 </tr>
935 <tr> <!-- from Cologne -->
936 <td><a href="http://wg21.link/p1186r3">P1186R3</a></td>
937 </tr>
938 <tr>
939 <td><a href="http://wg21.link/p1630r1">P1630R1</a></td>
Richard Smithac2c4bf2019-02-23 21:06:25 +0000940 </tr>
Richard Smith38ab6352017-11-11 17:54:46 +0000941 <tr>
942 <td>Access checking on specializations</td>
943 <td><a href="http://wg21.link/p0692r1">P0692R1</a></td>
944 <td class="partial" align="center">Partial</td>
945 </tr>
946 <tr>
947 <td>Default constructible and assignable stateless lambdas</td>
948 <td><a href="http://wg21.link/p0624r2">P0624R2</a></td>
Richard Smith27b6ecd2019-05-04 00:23:18 +0000949 <td class="full" align="center">Clang 8</td>
Richard Smith38ab6352017-11-11 17:54:46 +0000950 </tr>
951 <tr>
952 <td>Lambdas in unevaluated contexts</td>
953 <td><a href="http://wg21.link/p0315r4">P0315R4</a></td>
Richard Smith86f8aca2017-07-15 15:42:36 +0000954 <td class="none" align="center">No</td>
955 </tr>
Richard Smith22fe1e62018-03-17 14:28:47 +0000956 <!-- Jacksonville papers -->
957 <tr>
958 <td><tt>[[no_unique_address]]</tt> attribute</td>
959 <td><a href="http://wg21.link/p0840r2">P0840R2</a></td>
Richard Smith796b29c2019-09-20 18:09:05 +0000960 <td class="full" align="center">Clang 9</td>
Richard Smith22fe1e62018-03-17 14:28:47 +0000961 </tr>
962 <tr>
963 <td><tt>[[likely]]</tt> and <tt>[[unlikely]]</tt> attributes</td>
964 <td><a href="http://wg21.link/p0479r5">P0479R5</a></td>
965 <td class="none" align="center">No</td>
966 </tr>
967 <tr>
968 <td><tt>typename</tt> optional in more contexts</td>
969 <td><a href="http://wg21.link/p0634r3">P0634R3</a></td>
970 <td class="none" align="center">No</td>
971 </tr>
972 <tr>
973 <td>Pack expansion in lambda <i>init-capture</i></td>
974 <td><a href="http://wg21.link/p0780r2">P0780R2</a></td>
Richard Smith796b29c2019-09-20 18:09:05 +0000975 <td class="full" align="center">Clang 9</td>
Richard Smith22fe1e62018-03-17 14:28:47 +0000976 </tr>
Richard Smithb878dfd2018-06-14 00:05:28 +0000977 <!-- Rapperswil papers -->
978 <tr>
979 <td>Class types as non-type template parameters</td>
980 <td><a href="http://wg21.link/p0732r2">P0732R2</a></td>
981 <td class="none" align="center">No</td>
982 </tr>
983 <tr>
984 <td>Destroying operator delete</td>
985 <td><a href="http://wg21.link/p0722r3">P0722R3</a></td>
986 <td class="full" align="center">Clang 6</td>
987 </tr>
988 <tr>
Richard Smith30934c82019-07-20 08:20:54 +0000989 <td rowspan="7">Relaxations of <tt>constexpr</tt> restrictions</td>
Richard Smithb878dfd2018-06-14 00:05:28 +0000990 <td><a href="http://wg21.link/p1064r0">P1064R0</a></td>
Richard Smith796b29c2019-09-20 18:09:05 +0000991 <td class="full" align="center">Clang 9</td>
Richard Smithb878dfd2018-06-14 00:05:28 +0000992 </tr>
Richard Smith5a7aa712018-11-10 18:02:40 +0000993 <tr> <!-- from San Diego -->
994 <td><a href="http://wg21.link/p1002r1">P1002R1</a></td>
Richard Smith27b6ecd2019-05-04 00:23:18 +0000995 <td class="full" align="center">Clang 8</td>
Richard Smith5a7aa712018-11-10 18:02:40 +0000996 </tr>
997 <tr>
998 <td><a href="http://wg21.link/p1327r1">P1327R1</a></td>
Richard Smith796b29c2019-09-20 18:09:05 +0000999 <td rowspan="2" class="full" align="center">Clang 9</td>
Richard Smith5a7aa712018-11-10 18:02:40 +00001000 </tr>
1001 <tr>
1002 <td><a href="http://wg21.link/p1330r0">P1330R0</a></td>
1003 </tr>
Richard Smith30934c82019-07-20 08:20:54 +00001004 <tr> <!-- from Cologne -->
1005 <td><a href="http://wg21.link/p1331r2">P1331R2</a></td>
Richard Smith6d2412c2019-10-03 00:39:37 +00001006 <td rowspan="3" class="svn" align="center">SVN</td>
Richard Smith30934c82019-07-20 08:20:54 +00001007 </tr>
1008 <tr>
1009 <td><a href="http://wg21.link/p1668r1">P1668R1</a></td>
1010 </tr>
1011 <tr>
1012 <td><a href="http://wg21.link/p0784r7">P0784R7</a></td>
1013 </tr>
Richard Smithb878dfd2018-06-14 00:05:28 +00001014 <tr>
1015 <td>Prohibit aggregates with user-declared constructors</td>
1016 <td><a href="http://wg21.link/p1008r1">P1008R1</a></td>
Richard Smith27b6ecd2019-05-04 00:23:18 +00001017 <td class="full" align="center">Clang 8</td>
Richard Smithb878dfd2018-06-14 00:05:28 +00001018 </tr>
1019 <tr>
Richard Smithb878dfd2018-06-14 00:05:28 +00001020 <td>Feature test macros</td>
1021 <td><a href="http://wg21.link/p0941r2">P0941R2</a></td>
Richard Smith76529412018-06-14 00:40:20 +00001022 <td class="full" align="center"><a href="#sd6">(see below)</a></td>
Richard Smithb878dfd2018-06-14 00:05:28 +00001023 </tr>
1024 <tr>
1025 <td><tt>explicit(bool)</tt></td>
1026 <td><a href="http://wg21.link/p0892r2">P0892R2</a></td>
Richard Smith796b29c2019-09-20 18:09:05 +00001027 <td class="full" align="center">Clang 9</td>
Richard Smithb878dfd2018-06-14 00:05:28 +00001028 </tr>
Richard Smith5a7aa712018-11-10 18:02:40 +00001029 <!-- San Diego papers -->
1030 <tr>
1031 <td>Signed integers are two's complement</td>
1032 <td><a href="http://wg21.link/p1236r1">P1236R1</a></td>
Richard Smith796b29c2019-09-20 18:09:05 +00001033 <td class="full" align="center">Clang 9</td>
Richard Smith5a7aa712018-11-10 18:02:40 +00001034 </tr>
1035 <tr>
1036 <td><tt>char8_t</tt></td>
1037 <td><a href="http://wg21.link/p0482r6">P0482R6</a></td>
Richard Smith761a1b52018-11-14 21:04:34 +00001038 <td class="full" align="center">Clang 7 <a href="#p0482">(11)</a></td>
Richard Smith5a7aa712018-11-10 18:02:40 +00001039 </tr>
1040 <tr>
1041 <td>Immediate functions (<tt>consteval</tt>)</td>
1042 <td><a href="http://wg21.link/p1073r3">P1073R3</a></td>
1043 <td class="none" align="center">No</td>
1044 </tr>
1045 <tr>
1046 <td><tt>std::is_constant_evaluated</tt></td>
1047 <td><a href="http://wg21.link/p0595r2">P0595R2</a></td>
Richard Smith796b29c2019-09-20 18:09:05 +00001048 <td class="full" align="center">Clang 9</td>
Richard Smith5a7aa712018-11-10 18:02:40 +00001049 </tr>
1050 <tr>
1051 <td>Nested inline namespaces</td>
1052 <td><a href="http://wg21.link/p1094r2">P1094R2</a></td>
Richard Smith27b6ecd2019-05-04 00:23:18 +00001053 <td class="full" align="center">Clang 8</td>
Richard Smith5a7aa712018-11-10 18:02:40 +00001054 </tr>
Richard Smithac2c4bf2019-02-23 21:06:25 +00001055 <!-- Kona 2019 papers -->
1056 <tr>
1057 <td rowspan="2">Structured binding extensions</td>
1058 <td><a href="http://wg21.link/p1091r3">P1091R3</a></td>
Richard Smithafcbd612019-05-22 19:52:55 +00001059 <td rowspan="2" class="partial" align="center">Partial</td>
Richard Smithac2c4bf2019-02-23 21:06:25 +00001060 </tr>
1061 <tr>
1062 <td><a href="http://wg21.link/p1381r1">P1381R1</a></td>
1063 </tr>
1064 <tr>
1065 <td rowspan="2">Stronger Unicode requirements</td>
1066 <td><a href="http://wg21.link/p1041r4">P1041R4</a></td>
1067 <td rowspan="2" class="full" align="center">Yes</td>
1068 </tr>
1069 <tr>
1070 <td><a href="http://wg21.link/p1139r2">P1139R2</a></td>
1071 </tr>
1072 <tr>
1073 <td>Parenthesized initialization of aggregates</td>
1074 <td><a href="http://wg21.link/p0960r3">P0960R3</a></td>
1075 <td class="none" align="center">No</td>
1076 </tr>
1077 <tr>
Richard Smith30934c82019-07-20 08:20:54 +00001078 <td rowspan="4">Modules</td>
Richard Smithac2c4bf2019-02-23 21:06:25 +00001079 <td><a href="http://wg21.link/p1103r3">P1103R3</a></td>
Richard Smith67a39e22019-05-04 00:27:21 +00001080 <td class="partial" align="center">Partial</td>
Richard Smithac2c4bf2019-02-23 21:06:25 +00001081 </tr>
Richard Smith30934c82019-07-20 08:20:54 +00001082 <tr> <!-- from Cologne -->
1083 <td><a href="http://wg21.link/p1766r1">P1766R1</a> (<a href="#dr">DR</a>)</td>
1084 <td rowspan="3" class="none" align="center">No</td>
1085 </tr>
1086 <tr>
1087 <td><a href="http://wg21.link/p1811r0">P1811R0</a></td>
1088 </tr>
1089 <tr>
1090 <td><a href="http://wg21.link/p1703r1">P1703R1</a></td>
1091 </tr>
Richard Smithac2c4bf2019-02-23 21:06:25 +00001092 <tr>
1093 <td>Coroutines</td>
1094 <td><a href="http://wg21.link/p0912r5">P0912R5</a></td>
Richard Smithdb44dfe2019-02-23 21:06:26 +00001095 <td class="partial" align="center">Partial</td>
Richard Smithac2c4bf2019-02-23 21:06:25 +00001096 </tr>
Richard Smith30934c82019-07-20 08:20:54 +00001097 <!-- Cologne 2019 papers -->
1098 <tr>
1099 <td>Deprecate <tt>a[b,c]</tt></td>
1100 <td><a href="http://wg21.link/p1161r3">P1161R3</a></td>
Richard Smith796b29c2019-09-20 18:09:05 +00001101 <td class="full" align="center">Clang 9</td>
Richard Smith30934c82019-07-20 08:20:54 +00001102 </tr>
1103 <tr>
1104 <td>Deprecate some problematic uses of <tt>volatile</tt></td>
1105 <td><a href="http://wg21.link/p1152r4">P1152R4</a></td>
Richard Smithd2d3fbf2019-10-09 02:04:54 +00001106 <td class="svn" align="center">SVN</td>
Richard Smith30934c82019-07-20 08:20:54 +00001107 </tr>
1108 <tr>
1109 <td><tt>[[nodiscard("with reason")]]</tt></td>
1110 <td><a href="http://wg21.link/p1301r4">P1301R4</a></td>
Richard Smith796b29c2019-09-20 18:09:05 +00001111 <td class="full" align="center">Clang 9</td>
Richard Smith30934c82019-07-20 08:20:54 +00001112 </tr>
1113 <tr>
1114 <td><tt>using enum</tt></td>
1115 <td><a href="http://wg21.link/p1099r5">P1099R5</a></td>
1116 <td class="none" align="center">No</td>
1117 </tr>
1118 <tr>
1119 <td>Class template argument deduction for aggregates</td>
1120 <td><a href="http://wg21.link/p1816r0">P1816R0</a></td>
1121 <td class="none" align="center">No</td>
1122 </tr>
1123 <tr>
1124 <td>Class template argument deduction for alias templates</td>
1125 <td><a href="http://wg21.link/p1814r0">P1814R0</a></td>
1126 <td class="none" align="center">No</td>
1127 </tr>
1128 <tr>
1129 <td>Permit conversions to arrays of unknown bound</td>
1130 <td><a href="http://wg21.link/p0388r4">P0388R4</a></td>
1131 <td class="none" align="center">No</td>
1132 </tr>
1133 <tr>
1134 <td><tt>constinit</tt></td>
1135 <td><a href="http://wg21.link/p1143r2">P1143R2</a></td>
Richard Smith940249d2019-09-04 20:30:37 +00001136 <td class="svn" align="center">SVN</td>
Richard Smith30934c82019-07-20 08:20:54 +00001137 </tr>
Richard Smith86f8aca2017-07-15 15:42:36 +00001138</table>
Richard Smith761a1b52018-11-14 21:04:34 +00001139
1140<p>
1141<span id="p0482">(11): Prior to Clang 8, this feature is not enabled by
1142<tt>-std=c++2a</tt>, but can be enabled with <tt>-fchar8_t</tt>.
1143</span>
1144</p>
Richard Smith86f8aca2017-07-15 15:42:36 +00001145</details>
1146
Richard Smith22fe1e62018-03-17 14:28:47 +00001147<h2 id="dr">Defect reports</h2>
1148
1149<p>Clang generally aims to implement resolutions to Defect Reports (bug fixes
1150against prior standards) retroactively, in all prior standard versions where
1151the fix is meaningful. Significant Defect Report changes to language features
1152after the publication of the relevant standard are marked (DR) in the above
1153table.</p>
1154
1155<p>Clang also has a test suite for conformance to resolutions for issues on the
1156<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_toc.html">C++ core issues list</a>,
1157most of which are considered Defect Reports.
1158<a href="cxx_dr_status.html">Implementation status for C++ core issues</a> based on
1159that test suite is tracked on a separate page.</p>
Richard Smith8d34d182017-09-07 07:22:36 +00001160
Richard Smith24f94d32013-11-27 22:58:16 +00001161<h2 id="ts">Technical specifications and standing documents</h2>
1162
1163<p>ISO C++ also publishes a number of documents describing additional language
Richard Smith827cdbc2016-09-28 21:01:37 +00001164and library features that are not part of standard C++.</p>
1165
1166<details open>
1167<summary>List of features and minimum Clang version with support</summary>
Richard Smith24f94d32013-11-27 22:58:16 +00001168
1169<table width="689" border="1" cellspacing="0">
1170 <tr>
1171 <th>Document</th>
1172 <th>Latest draft</th>
Richard Smith827cdbc2016-09-28 21:01:37 +00001173 <th>Compiler flag</th>
Richard Smith24f94d32013-11-27 22:58:16 +00001174 <th>Available in Clang?</th>
1175 </tr>
Richard Smithb878dfd2018-06-14 00:05:28 +00001176 <tr id="sd6">
Chris Kennelly14f508a2019-01-11 17:09:22 +00001177 <td rowspan="6">SD-6: SG10 feature test recommendations</td>
1178 <td rowspan="6"><a href="http://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations">SD-6</a></td>
1179 <td rowspan="6">N/A</td>
Richard Smithc644bb92014-11-12 21:16:38 +00001180 <td class="full" align="center">
1181 Clang 3.4 (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3745">N3745</a>)</br>
1182 </td>
1183 </tr>
1184 <tr>
Richard Smith1fd6dc62015-11-11 01:36:17 +00001185 <td class="full" align="center">
Benjamin Kramer5252a7c2015-02-09 11:48:43 +00001186 Clang 3.6 (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4200">N4200</a>)</a>
Richard Smithc644bb92014-11-12 21:16:38 +00001187 </td>
Richard Smith24f94d32013-11-27 22:58:16 +00001188 </tr>
Richard Smith252e09f2016-09-28 19:44:50 +00001189 <tr>
Richard Smith71e04142017-01-13 00:57:54 +00001190 <td class="full" align="center">
1191 Clang 4 (<a href="http://wg21.link/p0096r3">P0096R3</a>)</a>
Richard Smith252e09f2016-09-28 19:44:50 +00001192 </td>
1193 </tr>
Richard Smith6a95db82017-08-11 03:39:40 +00001194 <tr>
Richard Smith3d9068b2017-09-09 01:11:04 +00001195 <td class="full" align="center">
Richard Smith6a95db82017-08-11 03:39:40 +00001196 Clang 5 (<a href="http://wg21.link/p0096r4">P0096R4</a>)</a>
1197 </td>
1198 </tr>
Richard Smith76529412018-06-14 00:40:20 +00001199 <tr>
Richard Smith16e31db2018-09-24 23:21:09 +00001200 <td class="full" align="center">
Richard Smith6f891092018-08-04 01:02:00 +00001201 Clang 7 (<a href="http://wg21.link/p0096r5">P0096R5</a>)</a>
Richard Smith76529412018-06-14 00:40:20 +00001202 </td>
1203 </tr>
Chris Kennelly14f508a2019-01-11 17:09:22 +00001204 <tr>
1205 <td class="partial" align="center">
1206 WIP (<a href="http://wg21.link/p1353r0">P1353R0</a>)
1207 </td>
1208 </tr>
Richard Smithf913c312015-11-05 21:41:06 +00001209 <!-- FIXME: Implement latest recommendations.
Richard Smith24f94d32013-11-27 22:58:16 +00001210 <tr>
Richard Smithf913c312015-11-05 21:41:06 +00001211 <td class="svn" align="center">
Richard Smith252e09f2016-09-28 19:44:50 +00001212 SVN (<a href="http://wg21.link/p0096r3">P0096R3</a>)</a>
Richard Smithf913c312015-11-05 21:41:06 +00001213 </td>
1214 </tr>
1215 -->
1216 <!-- No compiler support is known to be needed for:
1217 * Concurrency TS
Richard Smith76529412018-06-14 00:40:20 +00001218 * Parallelism TS (v1, v2)
Richard Smithf913c312015-11-05 21:41:06 +00001219 * Ranges TS
1220 * Networking TS
1221 * File System TS
1222 -->
1223 <tr>
1224 <td>[TS] Concepts</td>
1225 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0121r0.pdf">P0121R0</a></td>
Richard Smith827cdbc2016-09-28 21:01:37 +00001226 <td></td>
Richard Smith38ab6352017-11-11 17:54:46 +00001227 <td class="na" align="center">Superseded by <a href="#p0734">P0734R0</a></td>
Richard Smith827cdbc2016-09-28 21:01:37 +00001228 </tr>
1229 <tr>
Richard Smith5a7aa712018-11-10 18:02:40 +00001230 <!-- track unimplemented Coroutines features: p0913r1 p0914r1 p1356r0 -->
Richard Smithac2c4bf2019-02-23 21:06:25 +00001231 <td rowspan="2">[TS] Coroutines</td>
1232 <td rowspan="2"><a href="https://isocpp.org/files/papers/N4663.pdf">N4663</a></td>
Richard Smithaeba8312017-07-06 00:29:13 +00001233 <td><tt>-fcoroutines-ts<br>-stdlib=libc++</tt></td>
Richard Smith3d9068b2017-09-09 01:11:04 +00001234 <td class="full" align="center">Clang 5</td>
Richard Smith24f94d32013-11-27 22:58:16 +00001235 </tr>
Richard Smithf4003142014-02-15 00:29:00 +00001236 <tr>
Richard Smithac2c4bf2019-02-23 21:06:25 +00001237 <td><tt>-std=c++2a<br>-stdlib=libc++</tt></td>
1238 <td class="na" align="center">Superseded by <a href="#p0912">P0912R5</a></td>
1239 </tr>
1240 <tr>
Richard Smithf913c312015-11-05 21:41:06 +00001241 <td>[TS] Library Fundamentals, Version 1 (invocation type traits)</td>
Richard Smith74b286d2015-11-05 22:21:52 +00001242 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4480.html">N4480</a></td>
Richard Smith827cdbc2016-09-28 21:01:37 +00001243 <td>N/A</td>
Richard Smithf4003142014-02-15 00:29:00 +00001244 <td class="none" align="center">No</td>
1245 </tr>
1246 <tr>
Richard Smith76529412018-06-14 00:40:20 +00001247 <td>[TS] Library Fundamentals, Version 2 (<tt>source_location</tt>)</td>
1248 <td><a href="http://wg21.link/n4617">N4617</a></td>
Richard Smith827cdbc2016-09-28 21:01:37 +00001249 <td>N/A</td>
Richard Smithbe100f22019-10-08 23:39:56 +00001250 <td class="full" align="center">Clang 9 (<a href="docs/LanguageExtensions.html#source-location-builtins">documentation</a>)</td>
Richard Smithf913c312015-11-05 21:41:06 +00001251 </tr>
1252 <tr>
Richard Smith76529412018-06-14 00:40:20 +00001253 <td>[TS] Modules</td>
1254 <td><a href="http://wg21.link/n4720">N4720</a></td>
Richard Smith827cdbc2016-09-28 21:01:37 +00001255 <td><tt>-fmodules-ts</tt></td>
Richard Smithac2c4bf2019-02-23 21:06:25 +00001256 <td class="na" align="center">Superseded by <a href="#p1103">P1103R3</a></td>
Richard Smithe7ba0f52016-03-04 21:01:14 +00001257 </tr>
Richard Smith22fe1e62018-03-17 14:28:47 +00001258 <tr>
1259 <td>[DRAFT TS] Reflection</td>
Richard Smith76529412018-06-14 00:40:20 +00001260 <td><a href="http://wg21.link/n4746">N4746</a></td>
Richard Smith22fe1e62018-03-17 14:28:47 +00001261 <td></td>
1262 <td class="none" align="center">No</td>
1263 </tr>
Richard Smithe7ba0f52016-03-04 21:01:14 +00001264 <tr>
Richard Smithf913c312015-11-05 21:41:06 +00001265 <td>[TS] Transactional Memory</td>
Richard Smith31bddff2015-11-26 02:23:21 +00001266 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4514.pdf">N4514</a></td>
Richard Smith827cdbc2016-09-28 21:01:37 +00001267 <td></td>
Richard Smithf4003142014-02-15 00:29:00 +00001268 <td class="none" align="center">No</td>
1269 </tr>
Richard Smith24f94d32013-11-27 22:58:16 +00001270</table>
Richard Smith827cdbc2016-09-28 21:01:37 +00001271</details>
Richard Smith24f94d32013-11-27 22:58:16 +00001272
Cedric Venet3d658642009-02-14 20:20:19 +00001273</div>
1274</body>
1275</html>