blob: 1fe28d5dcbc7af6e35a2b0c55aa943481d11310e [file] [log] [blame]
Richard Smithe2bf8782016-09-28 21:01:371<!DOCTYPE html>
Cedric Venet084381332009-02-14 20:20:192<html>
3<head>
Richard Smithe2bf8782016-09-28 21:01:374 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
Richard Smithcf31c6b2014-06-20 20:33:105 <title>Clang - C++1z, C++14, C++11 and C++98 Status</title>
Gabor Greifdd4ddf12009-02-25 15:22:456 <link type="text/css" rel="stylesheet" href="menu.css">
7 <link type="text/css" rel="stylesheet" href="content.css">
Cedric Venet084381332009-02-14 20:20:198 <style type="text/css">
Michael J. Spencere73bd642011-11-02 06:29:379 .none { background-color: #FFCCCC }
Richard Smith452d6b02013-05-04 07:02:1010 .partial { background-color: #FFE0B0 }
Richard Smithb9a7efd2012-02-14 22:39:2311 .svn { background-color: #FFFF99 }
Michael J. Spencere73bd642011-11-02 06:29:3712 .full { background-color: #CCFF99 }
Richard Smith6d244d72012-03-11 03:06:0013 .na { background-color: #DDDDDD }
Richard Smith9deb9d92013-03-12 19:56:0914 span:target { background-color: #FFFFBB; outline: #DDDD55 solid thin; }
Benjamin Kramer1c9e1582011-11-05 10:11:3615 th { background-color: #FFDDAA }
Richard Smith63497c62016-07-14 00:14:5916 td { vertical-align: middle }
Cedric Venet084381332009-02-14 20:20:1917 </style>
18</head>
19<body>
20
21<!--#include virtual="menu.html.incl"-->
22
23<div id="content">
24
25<!--*************************************************************************-->
Richard Smithcf31c6b2014-06-20 20:33:1026<h1>C++ Support in Clang</h1>
Cedric Venet084381332009-02-14 20:20:1927<!--*************************************************************************-->
Douglas Gregor0799d912009-06-27 19:33:5828<p>Last updated: $Date$</p>
Cedric Venet084381332009-02-14 20:20:1929
Richard Smith01881102016-09-28 19:22:3630<p>Clang fully implements all published ISO C++ standards (<a
31href="#cxx98">C++98 / C++03</a>, <a
32href="#cxx11">C++11</a>, and <a
33href="#cxx14">C++14</a>), and most of the upcoming <a
34href="#cxx17">C++1z</a> standard.
Alp Toker05f89432013-12-06 06:35:4935
Richard Smith60586342013-12-09 08:52:2336<p>The Clang community is continually striving to improve C++ standards
Alp Toker05f89432013-12-06 06:35:4937compliance between releases by submitting and tracking <a
38href="cxx_dr_status.html">C++ Defect Reports</a> and implementing resolutions
39as they become available.</p>
40
41<p>Experimental work is also under way to implement <a href="#ts">C++ Technical
42Specifications</a> that will help drive the future of the C++ programming
43language.</p>
44
Richard Smith60586342013-12-09 08:52:2345<p>The <a href="http://llvm.org/bugs/">LLVM bug tracker</a> contains Clang
46C++ components that track known bugs with Clang's language conformance in
47each language mode.</p>
48
Richard Smith18743de2012-02-24 18:42:0849<h2 id="cxx98">C++98 implementation status</h2>
50
Alp Toker05f89432013-12-06 06:35:4951<p>Clang implements all of the ISO C++ 1998 standard
Douglas Gregor17aa45d2011-07-21 17:46:1552 (including the defects addressed in the ISO C++ 2003 standard)
Richard Smith707e3ba2014-06-22 16:00:0553 except for <tt>export</tt> (which was removed in C++11).
Douglas Gregorbb26a922010-02-05 23:51:1454
Richard Smith18743de2012-02-24 18:42:0855<h2 id="cxx11">C++11 implementation status</h2>
Chris Lattner6fe37482010-05-21 20:59:4056
Richard Smithe2bf8782016-09-28 21:01:3757<p>Clang 3.3 and later implement all of the <a
58 href="http://www.iso.org/iso/catalogue_detail.htm?csnumber=50372">ISO
59 C++ 2011 standard</a>.
Chris Lattner6fe37482010-05-21 20:59:4060
Richard Smith531c9a02013-03-10 00:11:0061<p>By default, Clang builds C++ code according to the C++98 standard, with many
62C++11 features accepted as extensions. You can use Clang in C++11 mode with the
63<code>-std=c++11</code> option. Clang's C++11 mode can be used
Richard Smith01881102016-09-28 19:22:3664with <a href="http://libcxx.llvm.org/">libc++</a> or with gcc's libstdc++.
Jeffrey Yasskincb407572011-03-29 22:27:5065
Richard Smithe2bf8782016-09-28 21:01:3766<details>
67<summary>List of features and minimum Clang version with support</summary>
68
Cedric Venet084381332009-02-14 20:20:1969<table width="689" border="1" cellspacing="0">
Douglas Gregor1f64b592011-10-14 23:21:4970 <tr>
Benjamin Kramer1c9e1582011-11-05 10:11:3671 <th>Language Feature</th>
Richard Smith18743de2012-02-24 18:42:0872 <th>C++11 Proposal</th>
Benjamin Kramer1c9e1582011-11-05 10:11:3673 <th>Available in Clang?</th>
Douglas Gregor1f64b592011-10-14 23:21:4974 </tr>
75 <tr>
76 <td>Rvalue references</td>
77 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html">N2118</a></td>
Michael J. Spencere73bd642011-11-02 06:29:3778 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:4979 </tr>
80 <tr>
81 <td>&nbsp;&nbsp;&nbsp;&nbsp;Rvalue references for <code>*this</code></td>
82 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm">N2439</a></td>
Benjamin Kramer1c9e1582011-11-05 10:11:3683 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:4984 </tr>
85 <tr>
86 <td>Initialization of class objects by rvalues</td>
87 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html">N1610</a></td>
Michael J. Spencere73bd642011-11-02 06:29:3788 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:4989 </tr>
90 <tr>
91 <td>Non-static data member initializers</td>
92 <td><a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm">N2756</a></td>
Benjamin Kramer1c9e1582011-11-05 10:11:3693 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor1f64b592011-10-14 23:21:4994 </tr>
95 <tr>
96 <td>Variadic templates</td>
97 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf">N2242</a></td>
Michael J. Spencere73bd642011-11-02 06:29:3798 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:4999 </tr>
100 <tr>
101 <td>&nbsp;&nbsp;&nbsp;&nbsp;Extending variadic template template parameters</td>
102 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf">N2555</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37103 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:49104 </tr>
105 <tr>
106 <td>Initializer lists</td>
107 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm">N2672</a></td>
Richard Smith607d6312012-05-23 01:38:11108 <td class="full" align="center">Clang 3.1</td>
Douglas Gregor1f64b592011-10-14 23:21:49109 </tr>
110 <tr>
111 <td>Static assertions</td>
112 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html">N1720</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37113 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:49114 </tr>
115 <tr>
116 <td><code>auto</code>-typed variables</td>
117 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf">N1984</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37118 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:49119 </tr>
120 <tr>
121 <td>&nbsp;&nbsp;&nbsp;&nbsp;Multi-declarator <code>auto</code></td>
122 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf">N1737</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37123 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:49124 </tr>
125 <tr>
126 <td>&nbsp;&nbsp;&nbsp;&nbsp;Removal of auto as a storage-class specifier</td>
127 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm">N2546</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37128 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:49129 </tr>
130 <tr>
131 <td>&nbsp;&nbsp;&nbsp;&nbsp;New function declarator syntax</td>
132 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm">N2541</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37133 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:49134 </tr>
135 <tr>
Douglas Gregor34b2e8b2012-02-23 03:02:32136 <td>Lambda expressions</td>
Douglas Gregor1f64b592011-10-14 23:21:49137 <td><a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf">N2927</a></td>
Richard Smith607d6312012-05-23 01:38:11138 <td class="full" align="center">Clang 3.1</td>
Douglas Gregor1f64b592011-10-14 23:21:49139 </tr>
140 <tr>
141 <td>Declared type of an expression</td>
142 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf">N2343</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37143 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:49144 </tr>
145 <tr>
Douglas Gregor05989622012-04-10 20:00:33146 <td>&nbsp;&nbsp;&nbsp;&nbsp;Incomplete return types</td>
147 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf">N3276</a></td>
Richard Smith607d6312012-05-23 01:38:11148 <td class="full" align="center">Clang 3.1</td>
Douglas Gregor05989622012-04-10 20:00:33149 </tr>
150 <tr>
Douglas Gregor1f64b592011-10-14 23:21:49151 <td>Right angle brackets</td>
152 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html">N1757</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37153 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:49154 </tr>
155 <tr>
156 <td>Default template arguments for function templates</td>
157 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226">DR226</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37158 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:49159 </tr>
160 <tr>
161 <td>Solving the SFINAE problem for expressions</td>
162 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html">DR339</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37163 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:49164 </tr>
165 <tr>
166 <td>Alias templates</td>
167 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf">N2258</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37168 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor1f64b592011-10-14 23:21:49169 </tr>
170 <tr>
171 <td>Extern templates</td>
172 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm">N1987</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37173 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:49174 </tr>
175 <tr>
176 <td>Null pointer constant</td>
177 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf">N2431</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37178 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor1f64b592011-10-14 23:21:49179 </tr>
180 <tr>
181 <td>Strongly-typed enums</td>
182 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf">N2347</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37183 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:49184 </tr>
185 <tr>
186 <td>Forward declarations for enums</td>
Richard Smith4b38ded2012-03-14 23:13:10187 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf">N2764</a>
188 <br><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1206">DR1206</a></td>
Richard Smith607d6312012-05-23 01:38:11189 <td class="full" align="center">Clang 3.1</td>
Douglas Gregor1f64b592011-10-14 23:21:49190 </tr>
191 <tr>
Richard Smith3dd73db2014-01-17 00:11:48192 <td>Standardized attribute syntax</td>
Douglas Gregor1f64b592011-10-14 23:21:49193 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf">N2761</a></td>
Richard Smith99247722013-06-17 23:54:23194 <td class="full" align="center">Clang 3.3 <a href="#n2761">(1)</a></td>
Douglas Gregor1f64b592011-10-14 23:21:49195 </tr>
196 <tr>
197 <td>Generalized constant expressions</td>
198 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf">N2235</a></td>
Richard Smith607d6312012-05-23 01:38:11199 <td class="full" align="center">Clang 3.1</td>
Douglas Gregor1f64b592011-10-14 23:21:49200 </tr>
201 <tr>
202 <td>Alignment support</td>
203 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf">N2341</a></td>
Richard Smith99247722013-06-17 23:54:23204 <td class="full" align="center">Clang 3.3</td>
Douglas Gregor1f64b592011-10-14 23:21:49205 </tr>
Richard Smith7e34fbd2014-03-14 21:21:24206 <tr>
207 <td>Conditionally-support behavior</td>
208 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1627.pdf">N1627</a></td>
209 <td class="full" align="center">Clang 2.9</td>
210 </tr>
211 <tr>
212 <td>Changing undefined behavior into diagnosable errors</td>
213 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1727.pdf">N1727</a></td>
214 <td class="full" align="center">Clang 2.9</td>
215 </tr>
Douglas Gregor1f64b592011-10-14 23:21:49216 <tr>
217 <td>Delegating constructors</td>
218 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf">N1986</a></td>
Benjamin Kramer1c9e1582011-11-05 10:11:36219 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor1f64b592011-10-14 23:21:49220 </tr>
221 <tr>
222 <td>Inheriting constructors</td>
223 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm">N2540</a></td>
Richard Smith99247722013-06-17 23:54:23224 <td class="full" align="center">Clang 3.3</td>
Douglas Gregor1f64b592011-10-14 23:21:49225 </tr>
226 <tr>
227 <td>Explicit conversion operators</td>
228 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf">N2437</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37229 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor1f64b592011-10-14 23:21:49230 </tr>
231 <tr>
232 <td>New character types</td>
233 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html">N2249</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37234 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:49235 </tr>
236 <tr>
237 <td>Unicode string literals</td>
238 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm">N2442</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37239 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor1f64b592011-10-14 23:21:49240 </tr>
241 <tr>
242 <td>Raw string literals</td>
243 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm">N2442</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37244 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor1f64b592011-10-14 23:21:49245 </tr>
246 <tr>
Richard Smith2a70e652012-03-09 22:27:51247 <td>Universal character names in literals</td>
Douglas Gregor1f64b592011-10-14 23:21:49248 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html">N2170</a></td>
Richard Smith607d6312012-05-23 01:38:11249 <td class="full" align="center">Clang 3.1</td>
Douglas Gregor1f64b592011-10-14 23:21:49250 </tr>
251 <tr>
252 <td>User-defined literals</td>
253 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf">N2765</a></td>
Richard Smith607d6312012-05-23 01:38:11254 <td class="full" align="center">Clang 3.1</td>
Douglas Gregor1f64b592011-10-14 23:21:49255 </tr>
256 <tr>
257 <td>Standard Layout Types</td>
258 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm">N2342</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37259 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor1f64b592011-10-14 23:21:49260 </tr>
261 <tr>
Douglas Gregor7ff1e7e2011-10-28 19:44:09262 <td>Defaulted functions</td>
263 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm">N2346</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37264 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor7ff1e7e2011-10-28 19:44:09265 </tr>
266 <tr>
267 <td>Deleted functions</td>
Douglas Gregor1f64b592011-10-14 23:21:49268 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm">N2346</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37269 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:49270 </tr>
271 <tr>
272 <td>Extended friend declarations</td>
273 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf">N1791</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37274 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:49275 </tr>
276 <tr>
277 <td>Extending <code>sizeof</code></td>
Richard Smith4e837622012-02-24 18:37:14278 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html">N2253</a>
279 <br><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#850">DR850</a></td>
Richard Smith607d6312012-05-23 01:38:11280 <td class="full" align="center">Clang 3.1</td>
Douglas Gregor1f64b592011-10-14 23:21:49281 </tr>
282 <tr>
283 <td>Inline namespaces</td>
284 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm">N2535</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37285 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:49286 </tr>
287 <tr>
288 <td>Unrestricted unions</td>
289 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf">N2544</a></td>
Richard Smith607d6312012-05-23 01:38:11290 <td class="full" align="center">Clang 3.1</td>
Douglas Gregor1f64b592011-10-14 23:21:49291 </tr>
292 <tr>
293 <td>Local and unnamed types as template arguments</td>
294 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm">N2657</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37295 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:49296 </tr>
297 <tr>
298 <td>Range-based for</td>
299 <td><a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html">N2930</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37300 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor1f64b592011-10-14 23:21:49301 </tr>
302 <tr>
303 <td>Explicit virtual overrides</td>
304 <td><a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm">N2928</a>
Richard Smith4e837622012-02-24 18:37:14305 <br><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm">N3206</a>
306 <br><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm">N3272</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37307 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor1f64b592011-10-14 23:21:49308 </tr>
309 <tr>
310 <td>Minimal support for garbage collection and reachability-based leak detection</td>
311 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm">N2670</a></td>
Richard Smithd997cce2014-03-14 20:26:09312 <td class="na" align="center">N/A <a href="#n2670">(2)</a></td>
Douglas Gregor1f64b592011-10-14 23:21:49313 </tr>
314 <tr>
315 <td>Allowing move constructors to throw [noexcept]</td>
David Blaikie50361612011-11-02 15:13:40316 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html">N3050</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37317 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor1f64b592011-10-14 23:21:49318 </tr>
319 <tr>
320 <td>Defining move special member functions</td>
David Blaikie50361612011-11-02 15:13:40321 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html">N3053</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37322 <td class="full" align="center">Clang 3.0</td>
Douglas Gregor1f64b592011-10-14 23:21:49323 </tr>
Cedric Venet084381332009-02-14 20:20:19324
Douglas Gregor1f64b592011-10-14 23:21:49325 <tr class="separator">
Benjamin Kramer1c9e1582011-11-05 10:11:36326 <th align="center" colspan="3">Concurrency</th>
Douglas Gregor1f64b592011-10-14 23:21:49327 </tr>
328 <tr>
329 <td>Sequence points</td>
330 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html">N2239</a></td>
Richard Smith99247722013-06-17 23:54:23331 <td class="full" align="center">Clang 3.3</td>
Douglas Gregor1f64b592011-10-14 23:21:49332 </tr>
333 <tr>
334 <td>Atomic operations</td>
335 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html">N2427</a></td>
Richard Smith607d6312012-05-23 01:38:11336 <td class="full" align="center">Clang 3.1</td>
Douglas Gregor1f64b592011-10-14 23:21:49337 </tr>
338 <tr>
339 <td>Strong Compare and Exchange</td>
340 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2748.html">N2748</a></td>
Richard Smithd997cce2014-03-14 20:26:09341 <td class="full" align="center">Clang 3.1 <a href="#n2748">(3)</a></td>
Douglas Gregor1f64b592011-10-14 23:21:49342 </tr>
343 <tr>
344 <td>Bidirectional Fences</td>
345 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm">N2752</a></td>
Richard Smith607d6312012-05-23 01:38:11346 <td class="full" align="center">Clang 3.1</td>
Douglas Gregor1f64b592011-10-14 23:21:49347 </tr>
Douglas Gregor6b6e0822010-12-21 05:43:31348
Douglas Gregor1f64b592011-10-14 23:21:49349 <tr>
350 <td>Memory model</td>
351 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm">N2429</a></td>
Richard Smithbc4fc772013-01-29 04:55:18352 <td class="full" align="center">Clang 3.2</td>
Douglas Gregor1f64b592011-10-14 23:21:49353 </tr>
354 <tr>
355 <td>Data-dependency ordering: atomics and memory model</td>
356 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm">N2664</a></td>
Richard Smithd997cce2014-03-14 20:26:09357 <td class="full" align="center">Clang 3.2 <a href="#n2664">(4)</a></td>
Douglas Gregor1f64b592011-10-14 23:21:49358 </tr>
359 <tr>
360 <td>Propagating exceptions</td>
361 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html">N2179</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37362 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:49363 </tr>
364 <tr>
Douglas Gregor1f64b592011-10-14 23:21:49365 <td>Allow atomics use in signal handlers</td>
366 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm">N2547</a></td>
Richard Smith607d6312012-05-23 01:38:11367 <td class="full" align="center">Clang 3.1</td>
Douglas Gregor1f64b592011-10-14 23:21:49368 </tr>
369 <tr>
370 <td>Thread-local storage</td>
371 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm">N2659</a></td>
Richard Smith952923b2016-02-09 22:48:14372 <td class="full" align="center">Clang 3.3 <a href="#n2659">(5)</a></td>
Douglas Gregor1f64b592011-10-14 23:21:49373 </tr>
374 <tr>
375 <td>Dynamic initialization and destruction with concurrency</td>
376 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm">N2660</a></td>
Richard Smith537a8342013-02-22 09:31:00377 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:49378 </tr>
Cedric Venet084381332009-02-14 20:20:19379
Douglas Gregor1f64b592011-10-14 23:21:49380 <tr class="separator">
Richard Smith18743de2012-02-24 18:42:08381 <th align="center" colspan="3">C99 Features in C++11</th>
Douglas Gregor1f64b592011-10-14 23:21:49382 </tr>
383 <tr>
384 <td><code>__func__</code> predefined identifier</td>
385 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm">N2340</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37386 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:49387 </tr>
388 <tr>
389 <td>C99 preprocessor</td>
390 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm">N1653</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37391 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:49392 </tr>
393 <tr>
394 <td><code>long long</code></td>
395 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf">N1811</a></td>
Michael J. Spencere73bd642011-11-02 06:29:37396 <td class="full" align="center">Clang 2.9</td>
Douglas Gregor1f64b592011-10-14 23:21:49397 </tr>
398 <tr>
399 <td>Extended integral types</td>
400 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf">N1988</a></td>
Richard Smith952923b2016-02-09 22:48:14401 <td class="na" align="center">N/A <a href="#n1988">(6)</a></td>
Douglas Gregor1f64b592011-10-14 23:21:49402 </tr>
Cedric Venet084381332009-02-14 20:20:19403</table>
Richard Smith9deb9d92013-03-12 19:56:09404
405<p>
406<span id="n2761">(1): The <code>[[carries_dependency]]</code> attribute
Richard Smith38546ed2013-03-18 21:57:52407has no effect.</span><br>
Richard Smithd997cce2014-03-14 20:26:09408<span id="n2670">(2): No compiler changes are required for an implementation
409such as Clang that does not provide garbage collection.</span><br>
410<span id="n2748">(3): All compare-exchange operations are emitted as
Richard Smith38546ed2013-03-18 21:57:52411strong compare-exchanges.</span><br>
Richard Smithd997cce2014-03-14 20:26:09412<span id="n2664">(4): <code>memory_order_consume</code> is lowered to
Richard Smith38546ed2013-03-18 21:57:52413<code>memory_order_acquire</code>.</span><br>
Richard Smith952923b2016-02-09 22:48:14414<span id="n2659">(5): <code>thread_local</code> support
415requires a C++ runtime library providing <code>__cxa_thread_atexit</code>, such
416as <a href="http://libcxxabi.llvm.org">libc++abi</a> 3.6 or later,
417or libsupc++ 4.8 or later.</span><br>
418<span id="n1988">(6): No compiler changes are required for an implementation
Richard Smithd997cce2014-03-14 20:26:09419such as Clang that does not provide any extended integer types.
420<code>__int128</code> is not treated as an extended integer type,
421because changing <code>intmax_t</code> would be an ABI-incompatible
422change.</span>
Richard Smith9deb9d92013-03-12 19:56:09423</p>
Richard Smithe2bf8782016-09-28 21:01:37424</details>
Richard Smith9deb9d92013-03-12 19:56:09425
Richard Smith20f37672014-08-31 04:17:48426<h2 id="cxx14">C++14 implementation status</h2>
Richard Smith91725202013-04-19 17:27:48427
Richard Smith01881102016-09-28 19:22:36428<p>Clang 3.4 and later implement all of the <a
429 href="http://www.iso.org/iso/catalogue_detail.htm?csnumber=64029">ISO
Richard Smithe2bf8782016-09-28 21:01:37430 C++ 2014 standard</a>.
Richard Smith91725202013-04-19 17:27:48431
Richard Smith20f37672014-08-31 04:17:48432<p>You can use Clang in C++14 mode with the <code>-std=c++14</code> option
Richard Smith1b886322014-08-31 04:18:54433(use <code>-std=c++1y</code> in Clang 3.4 and earlier).</p>
Richard Smith4cf9a1e2013-04-20 13:22:50434
Richard Smithe2bf8782016-09-28 21:01:37435<details>
436<summary>List of features and minimum Clang version with support</summary>
437
Richard Smith91725202013-04-19 17:27:48438<table width="689" border="1" cellspacing="0">
439 <tr>
440 <th>Language Feature</th>
Richard Smith20f37672014-08-31 04:17:48441 <th>C++14 Proposal</th>
Richard Smith91725202013-04-19 17:27:48442 <th>Available in Clang?</th>
443 </tr>
444 <tr>
445 <td>Tweak to certain C++ contextual conversions</td>
446 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3323.pdf">N3323</a></td>
Richard Smith7fe89622014-02-03 06:58:08447 <td class="full" align="center">Clang 3.4</td>
Richard Smith91725202013-04-19 17:27:48448 </tr>
449 <tr>
Richard Smith0fa4fce2013-04-20 12:44:32450 <td>Binary literals</td>
Richard Smith91725202013-04-19 17:27:48451 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3472.pdf">N3472</a></td>
Benjamin Kramereb0ad452015-02-09 11:48:43452 <td class="full" align="center">Clang 2.9</td>
Richard Smith91725202013-04-19 17:27:48453 </tr>
454 <tr>
Richard Smith74aeef52013-04-26 16:15:35455 <td>decltype(auto)</td>
Richard Smithf2f6e1142013-05-09 18:53:17456 <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 Smith99247722013-06-17 23:54:23457 <td class="full" align="center">Clang 3.3</td>
Richard Smith74aeef52013-04-26 16:15:35458 </tr>
459 <tr>
Richard Smith5db8b282013-04-20 12:47:36460 <td>Return type deduction for normal functions</td>
Richard Smith7fe89622014-02-03 06:58:08461 <td class="full" align="center">Clang 3.4</td>
Richard Smith5db8b282013-04-20 12:47:36462 </tr>
Richard Smith0fa4fce2013-04-20 12:44:32463 <tr>
Richard Smith5db8b282013-04-20 12:47:36464 <td>Initialized lambda captures</td>
Richard Smithf2f6e1142013-05-09 18:53:17465 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3648.html">N3648</a></td>
Richard Smith7fe89622014-02-03 06:58:08466 <td class="full" align="center">Clang 3.4</td>
Richard Smith91725202013-04-19 17:27:48467 </tr>
468 <tr>
Richard Smith7898d7b2013-04-20 12:58:57469 <td>Generic lambdas</td>
Richard Smithf2f6e1142013-05-09 18:53:17470 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3649.html">N3649</a></td>
Richard Smith7fe89622014-02-03 06:58:08471 <td class="full" align="center">Clang 3.4</td>
Richard Smith91725202013-04-19 17:27:48472 </tr>
473 <tr>
Richard Smith7898d7b2013-04-20 12:58:57474 <td>Variable templates</td>
Richard Smithf2f6e1142013-05-09 18:53:17475 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3651.pdf">N3651</a></td>
Richard Smith7fe89622014-02-03 06:58:08476 <td class="full" align="center">Clang 3.4</td>
Richard Smith91725202013-04-19 17:27:48477 </tr>
478 <tr>
Richard Smith7feda2f2013-04-20 12:49:36479 <td>Relaxing requirements on constexpr functions</td>
Richard Smithf2f6e1142013-05-09 18:53:17480 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3652.html">N3652</a></td>
Richard Smith7fe89622014-02-03 06:58:08481 <td class="full" align="center">Clang 3.4</td>
Richard Smith91725202013-04-19 17:27:48482 </tr>
483 <tr>
Richard Smith5db8b282013-04-20 12:47:36484 <td>Member initializers and aggregates</td>
Richard Smithf2f6e1142013-05-09 18:53:17485 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3653.html">N3653</a></td>
Richard Smith99247722013-06-17 23:54:23486 <td class="full" align="center">Clang 3.3</td>
Richard Smith91725202013-04-19 17:27:48487 </tr>
Richard Smith91725202013-04-19 17:27:48488 <tr>
Richard Smithd3a73862013-04-20 12:57:49489 <td>Clarifying memory allocation</td>
Richard Smithf2f6e1142013-05-09 18:53:17490 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3664.html">N3664</a></td>
Richard Smith7fe89622014-02-03 06:58:08491 <td class="full" align="center">Clang 3.4</td>
Richard Smith91725202013-04-19 17:27:48492 </tr>
Richard Smith3ca005b2013-09-27 19:11:33493 <tr>
494 <td><tt>[[deprecated]]</tt> attribute</td>
495 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3760.html">N3760</a></td>
Richard Smith7fe89622014-02-03 06:58:08496 <td class="full" align="center">Clang 3.4</td>
Richard Smith3ca005b2013-09-27 19:11:33497 </tr>
498 <tr>
499 <td>Single quotation mark as digit separator</td>
Richard Smith2d1d3ca2013-11-05 08:27:00500 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3781.pdf">N3781</a></td>
Richard Smith7fe89622014-02-03 06:58:08501 <td class="full" align="center">Clang 3.4</td>
Richard Smith3ca005b2013-09-27 19:11:33502 </tr>
503 <tr>
Benjamin Kramer8ba47d02013-09-27 19:35:09504 <td>C++ Sized Deallocation</td>
Richard Smith2d1d3ca2013-11-05 08:27:00505 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3778.html">N3778</a></td>
Richard Smith952923b2016-02-09 22:48:14506 <td class="full" align="center">Clang 3.4 <a href="#n3778">(7)</a></td>
Richard Smith3ca005b2013-09-27 19:11:33507 </tr>
Richard Smith91725202013-04-19 17:27:48508</table>
Reid Kleckner7ffc3fb2015-03-20 00:31:07509
Larisse Voufoee3c1b22015-02-19 04:34:13510<p>
Richard Smith952923b2016-02-09 22:48:14511<span id="n3778">(7): In Clang 3.7 and later, sized deallocation is only enabled
Reid Kleckner7ffc3fb2015-03-20 00:31:07512if the user passes the <code>-fsized-deallocation</code> flag. The user must
513supply definitions of the sized deallocation functions, either by providing them
514explicitly or by using a C++ standard library that does. <code>libstdc++</code>
515added these functions in version 5.0, and <code>libc++</code> added them in
516version 3.7.
Larisse Voufoee3c1b22015-02-19 04:34:13517</span>
518</p>
Richard Smithe2bf8782016-09-28 21:01:37519</details>
Richard Smith91725202013-04-19 17:27:48520
Richard Smith76b9f232013-11-07 06:41:26521<h2 id="cxx17">C++1z implementation status</h2>
522
Richard Smith952923b2016-02-09 22:48:14523<p>Clang has <b>experimental</b> support for some proposed features of
524the C++ standard following C++14, provisionally named C++1z.
Richard Smithe2bf8782016-09-28 21:01:37525Note that support for these features may change or be removed without notice,
526as the draft C++1z standard evolves.
Richard Smithcf31c6b2014-06-20 20:33:10527
Richard Smith76b9f232013-11-07 06:41:26528<p>You can use Clang in C++1z mode with the <code>-std=c++1z</code> option.</p>
Richard Smithcf31c6b2014-06-20 20:33:10529
Richard Smithe2bf8782016-09-28 21:01:37530<details open>
531<summary>List of features and minimum Clang version with support</summary>
532
Richard Smithcf31c6b2014-06-20 20:33:10533<table width="689" border="1" cellspacing="0">
534 <tr>
535 <th>Language Feature</th>
536 <th>C++1z Proposal</th>
537 <th>Available in Clang?</th>
538 </tr>
Richard Smith0f0af192014-11-08 05:07:16539 <!-- Issaquah papers -->
Richard Smithcf31c6b2014-06-20 20:33:10540 <tr>
541 <td><tt>static_assert</tt> with no message</td>
542 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3928.pdf">N3928</a></td>
Richard Smithee0a49c2014-09-11 17:30:32543 <td class="full" align="center">Clang 3.5</td>
Richard Smithcf31c6b2014-06-20 20:33:10544 </tr>
Richard Smith0f0af192014-11-08 05:07:16545 <!-- Rapperswil papers -->
Richard Smithcf31c6b2014-06-20 20:33:10546 <tr>
547 <td>Disabling trigraph expansion by default</td>
Richard Smith410cc892014-11-26 03:26:53548 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4086.html">N4086</a></td>
Richard Smithee0a49c2014-09-11 17:30:32549 <td class="full" align="center">Clang 3.5</td>
Richard Smithcf31c6b2014-06-20 20:33:10550 </tr>
Richard Smith83d3f152014-11-27 01:54:27551 <!--
Richard Smithcf31c6b2014-06-20 20:33:10552 <tr>
Richard Smith83d3f152014-11-27 01:54:27553 <td rowspan="2">Terse range-based for loops (removed from C++1z)</td>
554 <td rowspan="2"><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3994.htm">N3994</a></td>
555 <td class="none" align="center">Clang 3.5: Yes</td>
Richard Smithcf31c6b2014-06-20 20:33:10556 </tr>
557 <tr>
Richard Smith83d3f152014-11-27 01:54:27558 <td class="svn" align="center">SVN: No</td>
559 </tr>
560 -->
561 <tr>
Richard Smithcf31c6b2014-06-20 20:33:10562 <td><tt>typename</tt> in a template template parameter</td>
563 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4051.html">N4051</a></td>
Richard Smithee0a49c2014-09-11 17:30:32564 <td class="full" align="center">Clang 3.5</td>
Richard Smithcf31c6b2014-06-20 20:33:10565 </tr>
Richard Smith410cc892014-11-26 03:26:53566 <tr>
567 <td>New <tt>auto</tt> rules for direct-list-initialization
568 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3922.html">N3922</a></td>
Richard Smith25dde972016-03-20 10:37:12569 <td class="full" align="center">Clang 3.8 <a href="#n3922">(8)</a></td>
Richard Smith410cc892014-11-26 03:26:53570 </tr>
Richard Smith0f0af192014-11-08 05:07:16571 <!-- Urbana papers -->
572 <tr>
Richard Smithf006a962016-03-04 21:01:14573 <td rowspan="2">Fold expressions</td>
Benjamin Kramereb0ad452015-02-09 11:48:43574 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4295.html">N4295</a></td>
Richard Smith42b10572015-11-11 01:36:17575 <td class="full" align="center">Clang 3.6</td>
Richard Smith3e3a7052014-11-08 06:08:42576 </tr>
Richard Smithf006a962016-03-04 21:01:14577 <tr> <!-- from Jacksonville -->
578 <td><a href="http://wg21.link/p0036r0">P0036R0</a></td>
Richard Smithb1a268a2016-08-15 02:47:23579 <td class="full" align="center">Clang 3.9</td>
Richard Smithf006a962016-03-04 21:01:14580 </tr>
Richard Smith3e3a7052014-11-08 06:08:42581 <tr>
582 <td><tt>u8</tt> character literals</td>
Benjamin Kramereb0ad452015-02-09 11:48:43583 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4267.html">N4267</a></td>
Richard Smith42b10572015-11-11 01:36:17584 <td class="full" align="center">Clang 3.6</td>
Richard Smith0f0af192014-11-08 05:07:16585 </tr>
Richard Smith13307f52014-11-08 05:37:34586 <tr>
587 <td>Nested namespace definition</td>
Benjamin Kramereb0ad452015-02-09 11:48:43588 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4230.html">N4230</a></td>
Richard Smith42b10572015-11-11 01:36:17589 <td class="full" align="center">Clang 3.6</td>
Richard Smith13307f52014-11-08 05:37:34590 </tr>
Aaron Ballman730476b2014-11-08 15:33:35591 <tr>
592 <td>Attributes for namespaces and enumerators</td>
Benjamin Kramereb0ad452015-02-09 11:48:43593 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4266.html">N4266</a></td>
Richard Smith42b10572015-11-11 01:36:17594 <td class="full" align="center">Clang 3.6</td>
Aaron Ballman730476b2014-11-08 15:33:35595 </tr>
Richard Smith410cc892014-11-26 03:26:53596 <tr>
597 <td>Allow constant evaluation for all non-type template arguments</td>
Benjamin Kramereb0ad452015-02-09 11:48:43598 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4268.html">N4268</a></td>
Richard Smith42b10572015-11-11 01:36:17599 <td class="full" align="center">Clang 3.6</td>
Richard Smith410cc892014-11-26 03:26:53600 </tr>
Richard Smith894835f2015-11-05 21:41:06601 <!-- Kona papers -->
602 <tr>
603 <td>Remove deprecated <tt>register</tt> storage class</td>
604 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0001r1.html">P0001R1</a></td>
Richard Smith25dde972016-03-20 10:37:12605 <td class="full" align="center">Clang 3.8</td>
Richard Smith894835f2015-11-05 21:41:06606 </tr>
607 <tr>
608 <td>Remove deprecated <tt>bool</tt> increment</td>
609 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0002r1.html">P0002R1</a></td>
Richard Smith25dde972016-03-20 10:37:12610 <td class="full" align="center">Clang 3.8</td>
Richard Smith894835f2015-11-05 21:41:06611 </tr>
612 <tr>
613 <td>Make exception specifications part of the type system</td>
614 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0012r1.html">P0012R1</a></td>
Richard Smith3f22bf92015-11-05 21:42:32615 <td class="none" align="center">No</td>
Richard Smith894835f2015-11-05 21:41:06616 </tr>
617 <tr>
Richard Smith4a0cd892015-11-26 02:16:37618 <td><tt>__has_include</tt> in preprocessor conditionals</td>
Richard Smith894835f2015-11-05 21:41:06619 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0061.html">P0061R1</a></td>
620 <td class="full" align="center">Yes</td>
621 </tr>
Richard Smith952923b2016-02-09 22:48:14622 <tr>
623 <td>New specification for inheriting constructors (<a href="cxx_dr_status.html#1941">DR1941</a> et al)</td>
624 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0136r1.html">P0136R1</a></td>
Richard Smithb1a268a2016-08-15 02:47:23625 <td class="full" align="center">Clang 3.9 <a href="#p0136">(9)</a></td>
Richard Smith952923b2016-02-09 22:48:14626 </tr>
Richard Smithf006a962016-03-04 21:01:14627 <!-- Jacksonville papers -->
628 <tr>
629 <td><tt>[[fallthrough]]</tt> attribute</td>
630 <td><a href="http://wg21.link/p0188r1">P0188R1</a></td>
Richard Smithb1a268a2016-08-15 02:47:23631 <td class="full" align="center">Clang 3.9</td>
Richard Smithf006a962016-03-04 21:01:14632 </tr>
633 <tr>
634 <td><tt>[[nodiscard]]</tt> attribute</td>
635 <td><a href="http://wg21.link/p0189r1">P0189R1</a></td>
Richard Smithb1a268a2016-08-15 02:47:23636 <td class="full" align="center">Clang 3.9</td>
Richard Smithf006a962016-03-04 21:01:14637 </tr>
638 <tr>
639 <td><tt>[[maybe_unused]]</tt> attribute</td>
640 <td><a href="http://wg21.link/p0212r1">P0212R1</a></td>
Richard Smithb1a268a2016-08-15 02:47:23641 <td class="full" align="center">Clang 3.9</td>
Richard Smithf006a962016-03-04 21:01:14642 </tr>
643 <tr>
644 <td>Aggregate initialization of classes with base classes</td>
645 <td><a href="http://wg21.link/p0017r1">P0017R1</a></td>
Richard Smithb1a268a2016-08-15 02:47:23646 <td class="full" align="center">Clang 3.9</td>
Richard Smithf006a962016-03-04 21:01:14647 </tr>
648 <tr>
649 <td><tt>constexpr</tt> lambda expressions</td>
650 <td><a href="http://wg21.link/p0170r1">P0170R1</a></td>
651 <td class="none" align="center">No</td>
652 </tr>
653 <tr>
654 <td>Differing <tt>begin</tt> and <tt>end</tt> types in range-based <tt>for</tt></td>
655 <td><a href="http://wg21.link/p0184r0">P0184R0</a></td>
Richard Smithb1a268a2016-08-15 02:47:23656 <td class="full" align="center">Clang 3.9</td>
Richard Smithf006a962016-03-04 21:01:14657 </tr>
658 <tr>
659 <td>Lambda capture of <tt>*this</tt></td>
660 <td><a href="http://wg21.link/p0018r3">P0018R3</a></td>
Richard Smithb1a268a2016-08-15 02:47:23661 <td class="full" align="center">Clang 3.9</td>
Richard Smithf006a962016-03-04 21:01:14662 </tr>
663 <tr>
664 <td>Direct-list-initialization of <tt>enum</tt>s</td>
665 <td><a href="http://wg21.link/p0138r2">P0138R2</a></td>
Richard Smithb1a268a2016-08-15 02:47:23666 <td class="full" align="center">Clang 3.9</td>
Richard Smithf006a962016-03-04 21:01:14667 </tr>
668 <tr>
669 <td>Hexadecimal floating-point literals</td>
670 <td><a href="http://wg21.link/p0245r1">P0245R1</a></td>
671 <td class="full" align="center">Yes</td>
672 </tr>
Richard Smithb130fe72016-06-23 19:16:49673 <!-- Oulu papers -->
Richard Smith74f56e72016-06-24 11:20:31674 <tr>
675 <td>Using attribute namespaces without repetition</td>
676 <td><a href="http://wg21.link/p0028r4">P0028R4</a></td>
Richard Smithb1a268a2016-08-15 02:47:23677 <td class="full" align="center">Clang 3.9</td>
Richard Smith74f56e72016-06-24 11:20:31678 </tr>
Richard Smith74f56e72016-06-24 11:20:31679 <tr>
680 <td>Dynamic memory allocation for over-aligned data</td>
681 <td><a href="http://wg21.link/p0035r4">P0035R4</a></td>
682 <td class="none" align="center">No</td>
683 </tr>
Richard Smith74f56e72016-06-24 11:20:31684 <tr>
685 <td>Template argument deduction for class templates</td>
686 <td><a href="http://wg21.link/p0091r3">P0091R3</a></td>
687 <td class="none" align="center">No</td>
688 </tr>
689 <tr>
Richard Smith3a2dc6f02016-06-24 12:21:30690 <td>Non-type template parameters with <tt>auto</tt> type</td>
Richard Smith74f56e72016-06-24 11:20:31691 <td><a href="http://wg21.link/p0127r2">P0127R2</a></td>
Richard Smith27143d82016-09-29 00:08:05692 <td class="svn" align="center">SVN</td>
Richard Smith74f56e72016-06-24 11:20:31693 </tr>
694 <tr>
695 <td>Guaranteed copy elision</td>
696 <td><a href="http://wg21.link/p0135r1">P0135R1</a></td>
697 <td class="none" align="center">No</td>
698 </tr>
Richard Smith74f56e72016-06-24 11:20:31699 <tr>
Richard Smith63497c62016-07-14 00:14:59700 <td rowspan=2>Stricter expression evaluation order</td>
Richard Smith74f56e72016-06-24 11:20:31701 <td><a href="http://wg21.link/p0145r3">P0145R3</a></td>
Richard Smith762672a2016-09-28 19:09:10702 <td class="svn" align="center" rowspan=2>SVN <a href="#p0145">(10)</a></td>
Richard Smith63497c62016-07-14 00:14:59703 </tr>
704 <tr>
705 <td><a href="http://wg21.link/p0400r0">P0400R0</a></td>
Richard Smith74f56e72016-06-24 11:20:31706 </tr>
707 <tr>
Richard Smith74f56e72016-06-24 11:20:31708 <td>Requirement to ignore unknown attributes</td>
709 <td><a href="http://wg21.link/p0283r2">P0283R2</a></td>
710 <td class="full" align="center">Yes</td>
711 </tr>
Richard Smithb130fe72016-06-23 19:16:49712 <tr>
713 <td><tt>constexpr</tt> <em>if-statement</em>s</td>
714 <td><a href="http://wg21.link/p0292r2">P0292R2</a></td>
Richard Smithb1a268a2016-08-15 02:47:23715 <td class="full" align="center">Clang 3.9</td>
Richard Smithb130fe72016-06-23 19:16:49716 </tr>
Richard Smith74f56e72016-06-24 11:20:31717 <tr>
718 <td>Inline variables</td>
719 <td><a href="http://wg21.link/p0386r2">P0386R2</a></td>
Richard Smithb1a268a2016-08-15 02:47:23720 <td class="full" align="center">Clang 3.9</td>
Richard Smith74f56e72016-06-24 11:20:31721 </tr>
Richard Smith74f56e72016-06-24 11:20:31722 <tr>
723 <td>Structured bindings</td>
724 <td><a href="http://wg21.link/p0217r3">P0217R3</a></td>
Richard Smith6ec6b242016-08-15 02:37:43725 <td class="partial" align="center">Partial</td>
Richard Smith74f56e72016-06-24 11:20:31726 </tr>
727 <tr>
Richard Smith90ea9eb2016-06-24 14:23:32728 <td>Separate variable and condition for <tt>if</tt> and <tt>switch</tt></td>
Richard Smith74f56e72016-06-24 11:20:31729 <td><a href="http://wg21.link/p0305r1">P0305R1</a></td>
Richard Smithb1a268a2016-08-15 02:47:23730 <td class="full" align="center">Clang 3.9</td>
Richard Smith74f56e72016-06-24 11:20:31731 </tr>
Richard Smithcf31c6b2014-06-20 20:33:10732</table>
Richard Smith76b9f232013-11-07 06:41:26733
Richard Smith42b10572015-11-11 01:36:17734<p>
Richard Smith952923b2016-02-09 22:48:14735<span id="n3922">(8): This is a backwards-incompatible change that is applied to
Richard Smith42b10572015-11-11 01:36:17736all language versions that allow type deduction from <tt>auto</tt>
737(per the request of the C++ committee).
738In Clang 3.7, a warning is emitted for all cases that would change meaning.
Richard Smith4a93c592016-06-28 20:37:43739</span><br>
Richard Smith5179eb72016-06-28 19:03:57740<span id="p0136">(9): This is the resolution to a Defect Report, so is applied
741to all language versions supporting inheriting constructors.
Richard Smith762672a2016-09-28 19:09:10742</span><br>
743<span id="p0145">(10): Under the MS ABI, this feature is not fully implementable,
744because the calling convention requires that function parameters are destroyed
745from left to right in the callee. In order to guarantee that destruction order
746is reverse construction order, the operands of overloaded
747<tt>operator&lt;&lt;</tt>, <tt>operator&gt;&gt;</tt>, <tt>operator-&gt;*</tt>,
748<tt>operator&amp;&amp;</tt>, <tt>operator||</tt>, and <tt>operator,</tt>
749functions are evaluated right-to-left under the MS ABI when called using operator
750syntax, not left-to-right as P0145R3 requires.
Richard Smith5179eb72016-06-28 19:03:57751</span>
Richard Smith42b10572015-11-11 01:36:17752</p>
Richard Smithe2bf8782016-09-28 21:01:37753</details>
Richard Smith42b10572015-11-11 01:36:17754
Richard Smith91e474f2013-11-27 22:58:16755<h2 id="ts">Technical specifications and standing documents</h2>
756
757<p>ISO C++ also publishes a number of documents describing additional language
Richard Smithe2bf8782016-09-28 21:01:37758and library features that are not part of standard C++.</p>
759
760<details open>
761<summary>List of features and minimum Clang version with support</summary>
Richard Smith91e474f2013-11-27 22:58:16762
763<table width="689" border="1" cellspacing="0">
764 <tr>
765 <th>Document</th>
766 <th>Latest draft</th>
Richard Smithe2bf8782016-09-28 21:01:37767 <th>Compiler flag</th>
Richard Smith91e474f2013-11-27 22:58:16768 <th>Available in Clang?</th>
769 </tr>
770 <tr>
Richard Smith6e4bedc2016-09-28 20:42:56771 <td rowspan="3">SD-6: SG10 feature test recommendations</td>
772 <td rowspan="3"><a href="http://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations">SD-6</a></td>
Richard Smithe2bf8782016-09-28 21:01:37773 <td rowspan="3">N/A</td>
Richard Smith38af8562014-11-12 21:16:38774 <td class="full" align="center">
775 Clang 3.4 (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3745">N3745</a>)</br>
776 </td>
777 </tr>
778 <tr>
Richard Smith42b10572015-11-11 01:36:17779 <td class="full" align="center">
Benjamin Kramereb0ad452015-02-09 11:48:43780 Clang 3.6 (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4200">N4200</a>)</a>
Richard Smith38af8562014-11-12 21:16:38781 </td>
Richard Smith91e474f2013-11-27 22:58:16782 </tr>
Richard Smithb02043c2016-09-28 19:44:50783 <tr>
784 <td class="svn" align="center">
Richard Smith38d91d42016-09-28 20:26:06785 SVN (<a href="http://wg21.link/p0096r3">P0096R3</a>)</a>
Richard Smithb02043c2016-09-28 19:44:50786 </td>
787 </tr>
Richard Smith894835f2015-11-05 21:41:06788 <!-- FIXME: Implement latest recommendations.
Richard Smith91e474f2013-11-27 22:58:16789 <tr>
Richard Smith894835f2015-11-05 21:41:06790 <td class="svn" align="center">
Richard Smithb02043c2016-09-28 19:44:50791 SVN (<a href="http://wg21.link/p0096r3">P0096R3</a>)</a>
Richard Smith894835f2015-11-05 21:41:06792 </td>
793 </tr>
794 -->
795 <!-- No compiler support is known to be needed for:
796 * Concurrency TS
797 * Parallelism TS
798 * Ranges TS
799 * Networking TS
800 * File System TS
801 -->
802 <tr>
803 <td>[TS] Concepts</td>
804 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0121r0.pdf">P0121R0</a></td>
Richard Smithe2bf8782016-09-28 21:01:37805 <td></td>
806 <td class="none" align="center">WIP</td>
807 </tr>
808 <tr>
809 <td>[DRAFT TS] Coroutines</td>
810 <td><a href="http://wg21.link/p0057r5">P0057R5</a></td>
811 <td></td>
812 <td class="none" align="center">WIP</td>
Richard Smith91e474f2013-11-27 22:58:16813 </tr>
Richard Smith3a0ed872014-02-15 00:29:00814 <tr>
Richard Smith894835f2015-11-05 21:41:06815 <td>[TS] Library Fundamentals, Version 1 (invocation type traits)</td>
Richard Smithea260412015-11-05 22:21:52816 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4480.html">N4480</a></td>
Richard Smithe2bf8782016-09-28 21:01:37817 <td>N/A</td>
Richard Smith3a0ed872014-02-15 00:29:00818 <td class="none" align="center">No</td>
819 </tr>
820 <tr>
Richard Smith894835f2015-11-05 21:41:06821 <td>[DRAFT TS] Library Fundamentals, Version 2 (<tt>source_location</tt>)</td>
Richard Smithe2bf8782016-09-28 21:01:37822 <td><a href="http://wg21.link/n4600">N4600</a></td>
823 <td>N/A</td>
Richard Smith894835f2015-11-05 21:41:06824 <td class="none" align="center">No</td>
825 </tr>
826 <tr>
Richard Smithe2bf8782016-09-28 21:01:37827 <td>[DRAFT TS] Modules</td>
828 <td><a href="http://wg21.link/n4592">N4592</a></td>
829 <td><tt>-fmodules-ts</tt></td>
830 <td class="none" align="center">WIP</td>
Richard Smithf006a962016-03-04 21:01:14831 </tr>
832 <tr>
Richard Smith894835f2015-11-05 21:41:06833 <td>[TS] Transactional Memory</td>
Richard Smith85864d52015-11-26 02:23:21834 <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4514.pdf">N4514</a></td>
Richard Smithe2bf8782016-09-28 21:01:37835 <td></td>
Richard Smith3a0ed872014-02-15 00:29:00836 <td class="none" align="center">No</td>
837 </tr>
Richard Smith91e474f2013-11-27 22:58:16838</table>
Richard Smithe2bf8782016-09-28 21:01:37839</details>
Richard Smith91e474f2013-11-27 22:58:16840
Cedric Venet084381332009-02-14 20:20:19841</div>
842</body>
843</html>