[wwwdocs][C++0x] Revamped C++0x status page

Doug Gregor doug.gregor@gmail.com
Wed Jan 2 13:49:00 GMT 2008


This is a revamped C++0x status page. It is intended to act both as a
scoreboard for us in our efforts to implement C++0x and as a handy
reference to users containing a list of all of the new language
features in C++0x and which versions of GCC (if any) support those
features. As far as I know, the list is completely in sync with
mainline GCC and its experimental C++0x mode. I'll wait two days, and
commit if there are no complaints.

 - Doug

<html>
<head>
  <title>C++0x Language Support in GCC</title>
    <style type="text/css">
      /* <![CDATA[*/
        address {text-align: right}
        tr.separator { background: #ffffcc}
      /* ]]> */
    </style>
</head>

<body>
  <h1>C++0x Language Support in GCC</h1>

  <p>C++0x is the working name of the next ISO C++ standard, due by
  the end of this decade, which introduces a host of new features into
  the standard C++ language and library. This project seeks to
  implement new C++0x features in GCC and to make it one of the first
  compilers to bring C++0x to C++ programmers.</p>

  <p>C++0x features are available as part of the "mainline" GCC
    compiler in the trunk of
    <a href="http://gcc.gnu.org/svn.html">GCC's Subversion
      repository</a> and in GCC 4.3 and later. To enable C++0x
      support, add the command-line parameter <code>-std=c++0x</code>
      to your <code>g++</code> command line. Or, to enable GNU
      extensions in addition to C++0x extensions,
      add <code>-std=gnu++0x</code> to your <code>g++</code> command
      line.</p>

  <p><b>Important</b>: because the ISO C++0x draft is still evolving,
  GCC's support for C++0x is <b>experimental</b>.  No attempt will be
  made to maintain backward compatibility with implementations of
  C++0x features that do not reflect the final C++0x standard.</p>

<h2>C++0x Language Features in GCC</h2>

  <p>The following table lists new language features that have been
  accepted into the C++0x draft standard. The "Proposal" column
  provides a link to the ISO C++ committee proposal that describes the
  feature, while the "Available in GCC?" column indicates the first
  version of GCC that contains an implementation of this feature (if
  it has been implemented). For the most complete and up-to-date
  information about new language features in C++0x, please see
  the <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/">ISO
  C++ Committee Papers</a> and look for the most recent "State of C++
  Evolution" paper by Alisdair Meridith. </p>

  <table border="1">
    <tr class="separator">
      <th>Language Feature</th>
      <th>Proposal</th>
      <th>Available in GCC?</th>
    </tr>
    <tr>
      <td>Rvalue references</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html">N2118</a></td>
      <td align="center"><a
href="http://gcc.gnu.org/gcc-4.3/changes.html">GCC 4.3</a></td>
    </tr>
    <tr>
      <td>    Rvalue references for <code>*this</code></td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm">N2439</a></td>
      <td align="center">No</td>
    </tr>
    <tr>
      <td>Variadic templates</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf">N2242</a></td>
      <td align="center"><a href="http://gcc.gnu.org/gcc-4.3/changes.html">GCC
      4.3</a></td>
    </tr>
    <tr>
      <td>Static assertions</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html">N1720</a></td>
      <td align="center"><a
href="http://gcc.gnu.org/gcc-4.3/changes.html">GCC 4.3</a></td>
    </tr>
    <tr>
      <td><code>auto</code>-typed variables</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf">N1984</a></td>
      <td align="center">No</td>
    </tr>
    <tr>
      <td>    Multi-declarator <code>auto</code></td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf">N1737</a></td>
      <td align="center">No</td>
    </tr>
    <tr>
      <td>Declared type of an expression</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf">N2343</a></td>
      <td align="center"><a href="http://gcc.gnu.org/gcc-4.3/changes.html">GCC
      4.3</a></td>
    </tr>
    <tr>
      <td>Right angle brackets</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html">N1757</a></td>
      <td align="center"><a href="http://gcc.gnu.org/gcc-4.3/changes.html">GCC
      4.3</a></td>
    </tr>
    <tr>
      <td>Default template arguments for function templates</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226">DR226</a></td>
      <td align="center"><a href="http://gcc.gnu.org/gcc-4.3/changes.html">GCC
      4.3</a></td>
    </tr>
    <tr>
      <td>Template aliases</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf">N2258</a></td>
      <td align="center">No</td>
    </tr>
    <tr>
      <td>Extern templates</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm">N1987</a></td>
      <td align="center">No</td>
    </tr>
    <tr>
      <td>Null pointer constant</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf">N2431</a></td>
      <td align="center">No</td>
    </tr>
    <tr>
      <td>Strongly-type enums</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf">N2437</a></td>
      <td align="center">No</td>
    </tr>
    <tr>
      <td>Generalized constant expressions</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf">N2235</a></td>
      <td align="center">No</td>
    </tr>
    <tr>
      <td>Alignment support</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf">N2341</a></td>
      <td align="center">No</td>
    </tr>
    <!-- Skipped N1627: Conditionally-support behavior -->
    <!-- Skipped N1727: Changing Undefined Behavior into Diagnosable --
      -- Errors -->
    <tr>
      <td>Delegating constructors</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf">N1986</a></td>
      <td align="center">No</td>
    </tr>
    <tr>
      <td>Explicit conversion operators</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.html">N2437</a></td>
      <td align="center">No</td>
    </tr>
    <tr>
      <td>New character types</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html">N2249</a></td>
      <td align="center">No</td>
    </tr>
    <tr>
      <td>Raw and Unicode string literals</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.html">N2442</a></td>
      <td align="center">No</td>
    </tr>
    <tr>
      <td>Extended PODs</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.html">N2342</a></td>
      <td align="center">No</td>
    </tr>
    <tr>
      <td>Initialization of class objects by rvalues</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html">N1610</a></td>
      <td align="center">No</td>
    </tr>
    <tr>
      <td>Extended friend declarations</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf">N1791</a></td>
      <td align="center">No</td>
    </tr>
    <tr>
      <td>Extending <code>sizeof</code></td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html">N2253</a></td>
      <td align="center">No</td>
    </tr>
    <tr>
      <td>Universal character name literals</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html">N2170</a></td>
      <td align="center">No</td>
    </tr>
    <tr>
      <td>Defaulted and deleted functions</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.html">N2346</a></td>
      <td align="center">No</td>
    </tr>
    <tr class="separator">
      <th align="center" colspan="3">Concurrency</th>
    </tr>
    <tr>
      <td>Sequence points</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.htm">N2239</a></td>
      <td align="center">No</td>
    </tr>
    <tr>
      <td>Atomic operations</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html">N2427</a></td>
      <td align="center">No</td>
    </tr>
    <tr>
      <td>Memory model</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm">N2429</a></td>
      <td align="center">No</td>
    </tr>
    <tr>
      <td>Copying and rethrowing exceptions</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html">N2179</a></td>
      <td align="center">No</td>
    </tr>
    <tr>
      <td>Abandoning a process</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm">N2440</a></td>
      <td align="center">No</td>
    </tr>
    <tr class="separator">
      <th align="center" colspan="3">C99 Features in C++0x</th>
    </tr>
    <tr>
      <td><code>__func__</code> predefined identifier</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.html">N2340</a></td>
      <td align="center"><a href="http://gcc.gnu.org/gcc-4.3/changes.html">GCC
      4.3</a></td>
    </tr>
    <tr>
      <td>C99 preprocessor</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm">N1653</a></td>
      <td align="center"><a href="http://gcc.gnu.org/gcc-4.3/changes.html">GCC
      4.3</a></td>
    </tr>
    <tr>
      <td><code>long long</code></td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf">N1811</a></td>
      <td align="center"><a href="http://gcc.gnu.org/gcc-4.3/changes.html">GCC
      4.3</a></td>
    </tr>
    <tr>
      <td>Extended integral types</td>
      <td><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf">N1988</a></td>
      <td align="center">No</td>
    </tr>
  </table>

<h2>Status by GCC Release</h2>
<ul>
  <li><a href="../gcc-4.3/cxx0x_status.html">GCC 4.3</a></li>
</ul>

<h2>Development Process</h2>
<p>Development of C++0x features occurs both on a dedicated C++0x
  branch and in the mainline compiler. Contributors are encouraged to
  submit their patches for the mainline compiler; we will also pick up
  the patches for the C++0x branch. Please put <code>[C++0x]</code> in
  the subject of your message to identify C++0x features.</p>

<p>When committing to the C++0x branch, please append ChangeLog
  entries to ChangeLog.cxx0x in the root of the branch.</p>

</body>
</html>



More information about the Gcc-patches mailing list