Document number: N2336=07-0196

Alisdair Meredith

State of C++ Evolution (Toronto 2007 Meeting)

This paper presents a quick summary of all papers submitted to WG21 for consideration by the Evolution Working Group, with an indication of their progress towards inclusion in the next C++ Standard. It is based on the pre-Toronto 2007 mailing, plus the post-Toronto papers made available on the meeting wiki for voting into the working paper.

There are no library papers here, unless highlighted by the Registration Document submitted following the Portland meeting. Otherwise this list focuses entirely on changes affecting clauses 1 -> 16.

Key to the tables

Papers have been grouped according to theme, and related papers joined into the same row, even when submitted by different authors. The intent is to capture the feature, rather than the workflow. Papers are ordered by theme, and themes ordered by document number for the first submission on that theme.

Note that while the deadline for new proposals for C++0x is long past, it is not unusual to split a specific feature out of an existing proposal, to ease their progress. Likewise, existing Core Working Group issues may grow large enough to merit a paper that would not have previously shown on this list.

Proposals in a green font have advanced a category since the last meeting, those in red have moved back, while those in yellow are new or have been updated since the last meeting.

Issues with a green background have been highlighted as the features that will be delivered in the next version of the standard in the Registration Document.

WG21 Number(s) Title Authors
Integrated into working paper
These proposals are already incorporated into the latest working paper, N2369, or the project editor has been directed to include them in the next draught.
N1377 N1385 N1690 N1770 N1855 N1952 N2118 A Proposal to Add an Rvalue Reference to the C++ Language H. Hinnant, P. Dimov, D. Abrahams, J. Adamczyk, A. Hommel
N1610 Clarification of Initialization of Class Objects by rvalues D. Abrahams, G. Powell
N1381 N1604 N1617 N1720 static_assert R. Klarer, J. Maddock, B. Dawes, H. Hinnant
N1406 N1449 N1451 N1489 N2112 N2258 Template aliases for C++ B. Stroustrup, G. Dos Reis, Mat Marcus, Walter E. Brown, Herb Sutter
N1448 N1960 N1987 Extern template Matt Marcus, Garbriel Dos Reis, John Spicer
N1483 N1603 N1704 N2080 N2152 N2191 N2242 Variadic Templates D. Gregor, J. Järvi, G. Powell
N1513 N1579 N1719 N2213 N2347 Strongly Typed Enums H. Sutter, D. Miller, B. Stroustrup
N1520 N1616 N1722 N1791 Extended friend Declarations William M. Miller
N1521 N1972 N1980 N2116 N2235 Generalized Constant Expressions Gabriel Dos Reis
N1545 N1566 N1653 Synchronizing the C++ preprocessor with C99 Clark Nelson, Paul Mensonides
N1546 N1877 N1971 N2140 N2165 N2252 N2301 N2341 Adding Alignment Support to the C++ Programming Language Attila (Farkas) Fehér, C. Nelson
N1564 N1627 "Conditionally-Supported Behavior" William M. Miller
N1727 Changing Undefined Behavior into Diagnosable Errors William M. Miller
N1565 N1693 N1735 N1811 Adding the long long type to C++ J. Stephen Adamczyk
N1746 N1988 Adding extended integer types to C++ J. Stephen Adamczyk
N1581 N1618 N1895 N1986 Delegating Constructors H. Sutter, F. Glassborow
N1628 N1823 N1955 N2018 N2149 N2249 New Character Types in C++ Lawrence Crowl
N1649 N1699 N1757 Right Angle Brackets Daveed Vandevoorde
N1721 N1794 N1894 N1984 Deducing the type of variable from its initializer expression J. Jaarvi, B. Stroustrup, G. Dos Reis
N1737 A Proposal to Restore Multi-declarator auto Declarations Walter E. Brown
N1944 N2052 N2171 N2239 A finer-grained alternative to sequence points Clark Nelson
N1970 N2202 N2251 N2340 Proposed addition of __func__ predefined identifier from C99 Alisdair Meredith, J Maurer
N2062 N2102 N2172 N2230 N2294 N2342 PODs unstrung Beman Dawes
N2096 N2179 Propagating exceptions when joining threads Peter Dimov
N2115 N2343 Decltype J. Järvi, B. Stroustrup, D. Gregor, J. Siek, G. Dos Reis
N2150 N2253 Extending sizeof Jens Maurer
N2210 N2326 N2346 Defaulted and Deleted Functions Lawrence Crowl
Voting at next meeting
These papers have been thoroughly reviewed are strong candidates to be brought forward for voting in Kona. They passed review too late to present to full committee in Toronto.
N2170 Universal Character Names in Literals Lawrence Crowl
Proposed wording under review in Core
These papers are undergoing final scrutiny in Core Working group. Full wording is available, and each has been reviewed at least once by the CWG. However, some draughting issues remain to be resolved before moving into the Working Paper.
N1478 N1527 N1607 N1705 N1978 New function declaration syntax for deduced return types J. Järvi, B. Stroustrup, D. Gregor, J. Siek, G. Dos Reis
N1488 N1601 N2214 A name for the null pointer: nullptr H. Sutter, B. Stroustrup
N1509 N1890 N1919 N2100 N2215 Initializer lists Bjarne Stroustrup, G. Dos Reis
N1526 N2013 N2331 Namespace Association ("Strong Using") Benjamin Kosnik, Jason Merril
N1592 N2223 N2333 N2380 Explicit Conversion Operators Lois Goldthwaite, Michael Wong, J Maurer
N1898 N2119 N2203 N2254 N2376 Inheriting Constructors M. Wong, A. Meredith, J. Maurer
N2042 N2081 N2193 N2307 Concepts (unified proposal) Doug Gregor, Bjarne Stroustrup
N2098 Scoped Concept maps Jeremy Siek
N2049 N2196 N2243 Proposal for new for-loop Thorsten Ottosen, Doug Gregor
N2052 N2171 N2300 Sequencing and the concurrency memory model Clark Nelson, Hans Boehm
N2053 N2146 N2295 Raw String Literals Beman Dawes
N2159 N2209 N2295 UTF8 Literals Lawrence Crowl
Blessed by evolution - wording available for initial review by Core
The design of these features is deemed complete and accepted by EWG, and there is a paper with complete wording for Core to review. However, CWG have not yet devoted any committee time to this issue. Typically papers in this state have been accepted by EWG at the previous meeting, or the version with proposed wording was not avaiable by the pre-meeting mailing.
N1427 N1945 N2187 Making Local Classes more Useful Anthony Williams
N1511 N1892 N2282 N2378 Extensible Literals I. McIntosh, M. Wong, R. Mak, R.Klarer Bjarne Stroustrup
N1784 N1821 Extending Move Semantics To *this (Revision 2) D. Vandevoorde, B. Kozicki
N1874 N1966 N2147 N2280 Thread-Local Storage Lawrence Crowl
N1959 Member Initializers M Spertus
N2173 Core Extensions for Evolution Alisdair Meredith
N2236 N2379 General Attributes for C++ Michael Wong, Jens Maurer
Core issues addressed by specific papers
The design of these features are being handled by the Core Working Group as part of their issue resolution process, but the issue is large enough to prompt a full paper.
N1528 Syntactic Disambiguation Using the Template Keyword John H. Spicer
Active topics in Evolution
These topics are in final review, with the intention to incorporate each one in the next standard.
N1833 N1943 N2128 N2129 N2286 N2287 N2310 Transparent Garbage Collection for C++ H. Boehm, M. Spertus
N2261 Optimization-robust finalization H. J. Boehm, M. Spertus
N1968 N2329 Lambda expressions and closures for C++ J Willcock, J Järvi, D Gregor, A Lumsdaine, J. Freeman, L. Crowl
Active topics in Concurrency sub-group
These topics are in final review, guiding the final specification of the memory model for C++0x. It is hoped that all should be resolved during the next meeting.
N2148 N2325 Dynamic initialization and concurrency Lawrence Crowl
N2260 C++ Data-Dependency Ordering Paul E. McKenney
N2273 N2275 Non-Memory Actions Nick Maclaren
N2274 Object Aliasing and Threads Nick Maclaren
Active topics in both Concurrency and Library sub-groups
These topics are in final review, with the intention to incorporate each one in the next standard. It is hoped that all should progress during the next meeting.
N2047 N2145 N2324 Atomic operations with multi-threaded environments Hans Boehm, Lawrence Crowl
N2185 Proposed Text for Parallel Task Execution Peter Dimov
N2276 Thread Pools and Futures Anthony Williams
N2320 A Multi-threading Library for Standard C++ H. Hinnant, B. Dawes, L. Crowl, J. Garland, A. Williams
Background papers for reference
The papers do not contain actual proposals, but rather motivation, rationale and background to support other papers.
N1395 Aspects of Forwarding (was C++ Support For Delegation) Lois Goldthwaite
N1648 Motivation, Objectives and Design Decisions Attila Fehér
N1680 N1738 N1777 N1876 N1911 N1942 N2010 Memory model for multithreaded C++: Issues A. Alexandrescu, H. Boehm, K. Henney, B. Hutchings, D. Lea, B. Pugh
N1815 ISO C++ Strategic Plan for Multithreading Lawrence Crowl
N1834 A Pleading for Reasonable Parallel Processing Support in C++ Detlef Vollmann
N2012 Thread Subcommittee minutes from Berlin Lawrence Crowl
N2075 N2197 Prism: A Principle-Based Sequential Memory Model for Microsoft Native Code Platforms H Sutter
N2138 A Less Formal Explanation of the Proposed C++ Concurrency Memory Model Hans-J. Boehm
N2176 Memory Model Rationales Hans-J. Boehm
N1799 C++ Language Support for Generic Programming J. Siek, D. Gregor, R. Garcia, J. Willcock, J. Järvi, A. Lumsdaine
N1885 A formalism for C++ G. Dos Reis, B. Stroustrup
N1899 Concept proposal comparison Matt Austern
N2221 An analysis of concept intersection Bjarne Stroustrup, Gabriel Dos Reis
N1956 Design Rationale for C++/CLI H Sutter
N1976 Shared dynamic objects : review and issues Benjamin Kosnik
N2027 A Brief Introduction to Rvalue References Howard Hinnant, Bjarne Stroustrup, Brokek Kozicki
N2087 A brief introduction to variadic templates Doug Gregor
N2167 Linux Kernel Reference Counting Paul E. McKenney
N2177 Sequential Consistency for Atomics Hans-J. Boehm
N2272 Optional Sequential Consistency Nick Maclaren
N2216 Report on language support for Multi-Methods and Open-Methods for C++ P. Pirkelbauer, Y. Solodkyy, B. Stroustrup
Evolution of current proposals
These papers are the inspiration or history behind the active or accepted proposals. They might have been absorded into a larger proposal to ease taking a whole package through review. They are retained here as they capture a large part of the rationale that will produce C++0x.
N1401 Atomic operations with multi-threaded environments Jan Kristoffersen
N2016 Should volatile Acquire Atomicity and Thread Visibility Semantics? Nick McLaren, Hans Boehm
N2153 N2237 Memory model for weak ordering Raúl Silvera, Michael Wong, Paul McKenney, Bob Blainey
N2195 Proposed Text for Chapter 29, Atomic Operations Library Peter Dimov
N2262 Explicit Memory Fences R. Silvera, P. Dimov
N1445 N1582 N1702 N1717 Explicit class and default definitions F. Glassborow, L. Goldthwaite
N1602 Class Scope Using Declarations & private Members Francis Glassborow
N2123 Adding the prohibited access specifier to C++0x Alisdair Meredith
N1467 N1824 Extending Aggregate Initialization Alisdair Meredith, Daniel F. Gutson
N1493 Braces Initialization Overloading Daniel F. Gutson
N1584 N1701 Regularizing Initialization Syntax Francis Glassborow
N1510 N1522 N1536 N1782 N1886 Concepts - syntax and composition B. Stroustrup, G. Dos Reis
N1758 N1798 N1848 N1849 Concepts for C++0x J. Siek, D. Gregor et al.
N2161 Combining concepts Doug Gregor, Andrew Lumsdaine
N1534 N1642 Proposed addition of __func__ predefined identifier from C99 Alex Rosenberg
N1583 Inheriting Constructors F. Glassborow
N1682 N1907 N2285 A Multi-threading Library for Standard C++, Revision 2 Pete Becker
N1875 C++ Threads Lawrence Crowl
N2090 ; N2178 Proposed Text for Chapter 30, Thread Support Library Peter Dimov
N2094 N2184 Thread Launching for C++0X Howard Hinnant
N2139 Thoughts on a Thread Library for C++ Anthony Williams
N1796 N1868 N1961 Proposal for new for-loop Thorsten Ottosen
N1958 A proposal to add lambda functions to the C++ standard V Samko
N2061 N2106 N2229 ; N2107 Propagating exceptions when joining threads Beman Dawes; Alisdair Meredith, Jens Maurer
N2105 Choosing Keywords Beman Dawes
N2224 General Attributes for C++ Alisdair Meredith
Heading for a separate TR
These topics are deemed too important to wait for another standard after C++0x before being published, but too experimental to be finalised in time for the next Standard. Therefore, these features will be delivered by a technical report at the earliest opportunity.
N1567 N1776 N1839 N1965 N1977 Decimal Types for C++ Robert Klarer, P.J. Plauger
N1736 N1778 N1964 N2006 N2015 N2073 N2074 N2316 Modules in C++ Daveed Vandevoorde
Not ready for C++0x, but open to resubmit in future
Papers in this category have been reviewed in EWG but for various reasons they have not been accepted for C++0x. This may have been a lack of time to finalise the issues, a lack of motivation compared to competing papers, or simply the authors being pulled in different directions. This list is retained as a potential working list for EWG to pick up for the next standard revision.
N1384 ; N1600 ; N1615 PME: Properties, methods and events John Wiegley; Daveed Vandevoorde; Lois Goldthwaite
N1400 N1418 N1428 N1496 Draft Proposal for Dynamic Libraries in C++ Pete Becker, Matt Austern
N2117 Minimal Dynamic Library Support Lawrence Crowl
N1408 N1691 Explicit Namespaces David Abrahams
N1792 N1893 N1912 N2103 A Modest Proposal: Fixing ADL Herb Sutter, Daveed Vandevoorde
N1440 Proposed Addition to C++: Class Namespaces Carl Daniel
N1461 Security and Standard C Libraries Martyn Lovell
N1462 Safe Exceptions and Compiler Security Checks Brandon Bray
N1463 N1529 Draft proposal for adding Multimethods to C++ Julian Smith
N1466 Expliciting default parameters Daniel Gutson
N1470 ; N1741 Extending / checking Switch statements Daniel Gutson; Francis Glassborow
N1471 Reflective Metaprogramming in C++ Daveed Vandevoorde
N1524 Nested Namespace Definition Proposal Jon Jagger
N1585 N1716 N1742 Uniform Calling Syntax (Re-opening public interfaces) Francis Glassborow
N1611 Implicitly-Callable Functions in C++0x Walter E. Brown
N1613 N1669 N1773 N1800 N1866 N1867 N1962 Contract Programming For C++0x L. Crowl, T. Ottosen, D. Abrahams, J. Widman
N1614 N1625 N1726 N1740 Macro scopes Thomas Plum, Bjarne Stroustrup
N1664 ; N1703 Toward Improved Optimization Opportunities in C++0x W. Brown,M. Paterno; Francis Glassborow
N1671 N2200 Overloading Operator.() & Operator.*() G. Powell, D. Gregor, J. Jarvi
N1676 ; N2200 Non-member overloaded copy assignment operator Bronek Kozicki; G. Powell, D. Gregor, J. Jarvi
N1695 A Proposal to Make Pointers to Members Callable Peter Dimov
N1696 Language Support for Restricted Templates Peter Dimov
N1706 N1891 N2141 Toward Opaque typedefs in C++0X Walter E. Brown; Alisdair Meredith
N1751 ; N1775 Reflection in C++ Detlef Vollmann; Walter E. Brown, et al.
N1785 Toward a Proposal for Object Templates in C++0x Walter E. Brown
N1825 Addressing Exception Specifications for Next Generation of C++ Alisdair Meredith
N2248 Toward a More Perfect Union Lois Goldthwaite
N2281 Digit Separators Lawrence Crowl
N2312 Namespace Regions Michael Spertus
N2332 Argument Deduction for Constructors Michael Spertus
No interest, or superseded by other proposals
These papers have either been superseded by different set of proposals, or were identified as a something we do not want to do. While everyone is free to submit papers they feel strongly about, it is unlikely any of these topics will gain favour for a future standard unless something significantly new is presented with the updated paper.
N1394 Some proposed extensions to C++ language David Miller
N1464 Anonymous array members Daniel Gutson
N1465 Constant inheritance Daniel Gutson
N1468 Self methods Daniel Gutson
N1469 Inline Constants Daniel Gutson
N1494 Pure implementation method declaration Daniel F. Gutson
N1827 N2108 N2365 An Explicit Override Syntax for C++ C. Uzdavinis, A. Meredith, Jens Maurer
N1492 Exclusive Inheritance Daniel Gutson
N1605 Extending Template Type Parameters I: Namespace and scope Daniel Gutson
N1612 N1869 How we might remove the remaining shortcomings of std::complex<T> Thorsten Ottosen
N1694 A Proposal to Extend the Function Call Operator Peter Dimov