Remove stale #include.
[clang.git] / www / cxx_status.html
blob2d6a2e6bd0d8aecccb4b505593928c6b97effd79
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2 "http://www.w3.org/TR/html4/strict.dtd">
3 <html>
4 <head>
5 <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
6 <title>Clang - C++ and C++'0x Status</title>
7 <link type="text/css" rel="stylesheet" href="menu.css">
8 <link type="text/css" rel="stylesheet" href="content.css">
9 <style type="text/css">
10 .na { background-color: #C0C0C0; text-align: center; }
11 .broken { background-color: #C11B17 }
12 .basic { background-color: #F88017 }
13 .medium { background-color: #FDD017 }
14 .advanced { background-color: #347C17 }
15 .complete { background-color: #00FF00 }
16 </style>
17 </head>
18 <body>
20 <!--#include virtual="menu.html.incl"-->
22 <div id="content">
24 <!--*************************************************************************-->
25 <h1>C++ and C++'0x Support in Clang</h1>
26 <!--*************************************************************************-->
27 <p>Last updated: $Date$</p>
29 <ul>
30 <li><a href="#projects">Projects Building with Clang</a></li>
31 <li><a href="#specification">Implementation Status by Section</a></li>
32 <li><a href="#cxx0x">C++0x Status</a></li>
33 </ul>
35 <p>Clang currently implements all of the ISO C++ 1998 standard (including
36 the defects addressed in the ISO C++ 2003 standard) except for 'export'
37 (which has been removed from the C++'0x draft).
38 The <a href="http://llvm.org/bugs/">LLVM bug tracker</a>
39 contains a Clang C++ component that tracks known Clang C++ bugs.</p>
41 <h2 id="projects">Projects Building with Clang</h2>
43 <p>Clang is now capable of compiling large C++ projects, and the following
44 table describes various projects that we have attempted to compile with
45 Clang++.</p>
47 <table width="689" border="1" cellspacing="0">
48 <tr>
49 <th>Project</th>
50 <th>Status</th>
51 <th>Last Tested</th>
52 <th>Tracking Bug</th>
53 </tr>
54 <tr>
55 <td><a href="http://clang.llvm.org">Clang</a> and <a href="http://llvm.org">LLVM</a></td>
56 <td>Successful self-hosting achieved</td>
57 <td>Continually</td>
58 <td></td>
59 </tr>
60 <tr>
61 <td><a href="http://www.cmake.org">CMake</a></td>
62 <td>Compiles, passes regression tests (debug build)</td>
63 <td>February 9, 2010</td>
64 <td></td>
65 </tr>
66 <tr>
67 <td><a href="http://www.boost.org">Boost</a></td>
68 <td><a href="http://blog.llvm.org/2010/05/clang-builds-boost.html">Compiles
69 and passes regression tests</a> on Darwin/X86-64.</td>
70 <td>May 20, 2010</td>
71 <td><a href="http://llvm.org/bugs/show_bug.cgi?id=6023"><del>PR6023</del></a></td>
72 </tr>
73 <tr>
74 <td><a href="http://qt.nokia.com">Qt</a></td>
75 <td>Partially compiles; miscompilation of uic prevents complete compilation, qmake works, some small examples also.</td>
76 <td>February 9, 2010</td>
77 <td><a href="http://llvm.org/bugs/show_bug.cgi?id=5881">PR5881</a></td>
78 </tr>
79 </table>
81 <h2 id="cxx0x">C++0x Implementation status</h2>
83 <p>Clang's development effort is focused primarily on fixing bugs in the current
84 ISO C++ standard (1998/2003). This section tracks the status of various C++0x
85 features.</p>
88 <h2 id="specification">Implementation Status by Feature</h2>
91 <!-- Within this table: The colors we're using to color-code our level
92 of support for a given section:
94 White (no background): not considered/tested.
95 #C11B17: Broken.
96 #F88017: Some useful examples work
97 #FDD017: Many examples work
98 #347C17: Nearly everything works
99 #00FF00 + check mark: Implementation complete!
102 <p>The following table is used to help track our implementation
103 progress toward implementing the complete C++'0x standard. We use a
104 simple, somewhat arbitrary color-coding scheme to describe the
105 relative completeness of features:</p>
107 <table width="689" border="1" cellspacing="0">
108 <tr>
109 <th>Not started/not evaluated</th>
110 <th>Not Applicable</th>
111 <th>Broken</th>
112 <th>Some examples work</th>
113 <th>Many examples work</th>
114 <th>Nearly everything works</th>
115 <th>Complete</th>
116 <th>Complete (with tests for each paragraph)</th>
117 </tr>
118 <tr>
119 <td></td>
120 <td class="na">N/A</td>
121 <td class="broken"></td>
122 <td class="basic"></td>
123 <td class="medium"></td>
124 <td class="advanced"></td>
125 <td class="complete"></td>
126 <td class="complete" align="center">&#x2713;</td>
127 </tr>
128 </table>
130 <p>A feature is "complete" when the appropriate Clang component (Parse, AST,
131 Sema, CodeGen) implements the behavior described in all of the
132 paragraphs in the relevant C++'0x draft standard. The major
133 components are:</p>
135 <dl>
136 <dt>Parse</dt>
137 <dd>Clang is able to parse the grammar of this feature (or the grammar
138 described by this section), but does not necessarily do anything with the
139 parsed result. Use Clang's <code>-fsyntax-only</code> option to parse C++
140 programs.</dd>
142 <dt>AST</dt>
143 <dd>Clang builds an abstract syntax tree (AST) for the feature, but does not
144 necessarily perform any type-checking. Use Clang's <code>-ast-print</code>
145 option to print the resulting ASTs.</dd>
147 <dt>Sema</dt>
148 <dd>Clang parses and type-checks this feature and provides a well-formed AST
149 annotated with types. Use Clang's <code>-fsyntax-only</code> to type-check
150 code.</dd>
152 <dt>CodeGen</dt>
153 <dd>Clang parses, type-checks, and generates code for this feature, allowing
154 one to compile and execute programs.</dd>
155 </dl>
157 <p>Updates to this table are welcome! Tests for the various features are also
158 welcome!</p>
160 <table width="689" border="1" cellspacing="0">
161 <tr><td colspan="6" align="center" bgcolor="#ffffcc">C++0x Features</td>
162 </tr>
163 <tr>
164 <th>Feature</th>
165 <th>Parse</th>
166 <th>AST</th>
167 <th>Sema</th>
168 <th>CodeGen</th>
169 <th>Notes</th>
170 </tr>
172 <tr>
173 <td>Explicit conversion operators (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf">N2437</a>)</td>
174 <td class="complete" align="center"></td>
175 <td class="basic" align="center"></td>
176 <td class="basic" align="center"></td>
177 <td class="broken"></td>
178 <td>No name mangling; ASTs don't contain calls to conversion operators</td>
179 </tr>
180 <tr>
181 <td>Static assertions (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.pdf">N1720</a>)</td>
182 <td class="complete" align="center"></td>
183 <td class="complete" align="center"></td>
184 <td class="advanced" align="center"></td>
185 <td class="na">N/A</td>
186 <td></td>
187 </tr>
188 <tr>
189 <td>Deleted functions (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm">N2346</a>)</td>
190 <td class="complete" align="center"></td>
191 <td class="complete" align="center"></td>
192 <td class="medium" align="center"></td>
193 <td class="na">N/A</td>
194 <td></td>
195 </tr>
196 <tr>
197 <td>Rvalue references (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html">N2118</a> + <a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2831.html">N2831</a>)</td>
198 <td class="complete" align="center"></td>
199 <td class="complete" align="center"></td>
200 <td class="broken" align="center"></td>
201 <td class="broken"></td>
202 <td></td>
203 </tr>
204 <tr>
205 <td>nullptr (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf">N2431</a>)</td>
206 <td class="complete" align="center"></td>
207 <td class="complete" align="center"></td>
208 <td class="medium" align="center"></td>
209 <td class="broken"></td>
210 <td></td>
211 </tr>
212 <tr>
213 <td>Right angle brackets (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html">N1757</a>)</td>
214 <td class="complete" align="center"></td>
215 <td class="na" align="center">N/A</td>
216 <td class="na" align="center">N/A</td>
217 <td class="na">N/A</td>
218 <td></td>
219 </tr>
220 <tr>
221 <td>Decltype (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf">N2343</a>)</td>
222 <td class="complete" align="center">&#x2713;</td>
223 <td class="complete" align="center">&#x2713;</td>
224 <td class="advanced" align="center"></td>
225 <td class="na">N/A</td>
226 <td></td>
227 </tr>
228 <tr>
229 <td>noexcept (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html">N3050</a>)</td>
230 <td class="complete" align="center">&#x2713;</td>
231 <td class="complete" align="center">&#x2713;</td>
232 <td class="complete" align="center">&#x2713;</td>
233 <td class="na">N/A</td>
234 <td></td>
235 </tr>
236 <tr>
237 <td>Inline namespaces (<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm">N2535</a>)</td>
238 <td class="complete" align="center">&#x2713;</td>
239 <td class="complete" align="center">&#x2713;</td>
240 <td class="complete" align="center">&#x2713;</td>
241 <td class="complete" align="center">N/A</td>
242 <td></td>
243 </tr>
244 </table>
245 <br />
246 </div>
247 </body>
248 </html>