Document number: N2706=08-0216

Alisdair Meredith

C++ Library Working Group Status Report (Mid-term 2008 Mailing)

This paper presents a quick summary of all papers submitted to WG21 for consideration by the Library Working Group, with an indication of their progress towards inclusion in the next C++ Standard or future TRs. It is based on the post-Antipolis 2008 mailing.

There is a minimal crossover with the State of Evolution paper N2705 where concurrency related topics tend to cross the Core/Library divide, and till now have been largely handled by the Evolution Working Group.

Note on progress

A clear statement of intent was made to complete work on all features for the new standard and distribute a CD for ISO ballot following the San Francisco meeting in 2008, followed by an FCD for ballot at the end of 2009 proceeding to FDIS and final publication in late 2010.

In order to reach this goal, the threading library produced by the draughting comittee at Kona has been adopted, although concern was expressed by the Review Committee about the time-related portion of that document. Subsequently, chapter 31 of the working paper has been removed, and replaced by N2661.

A second proposed compromise to meet the timetable is the scaling back of the garbage collection feature. This has now been adopted as N2670.

The third compromise of a reduce scope 'asynchronous return buffer' was presented to the Library Working Group in Bellevue, and is close to final form in N2671, which has been held back one additional meeting to reduce complexity of the exception hierarchy used.

The major challenge confronting the Library Working Group now is to review the current library for the application of the new Concepts language feature. It is expected that this will consume considerable time at the next meeting. A challenge of a similar scale remains in processing the outstanding Issues List, not reflected here.

Note on previous documents

Much of the library development that has gone into the next standard occurred during the development of Library TR1. That process is captured in document N2364. The last revision of that TR is N1836.

Key to the tables

Papers have been grouped in a self-selecting manner as either new components or updates. There is usually a series of papers describing a proposal's evolution, and only the right-most paper is deemed current. Papers are listed in the order or the clause they apply to, or is most relevant. Exceptions are the updates for language features, which generally apply across the whole library.

Note that while the deadline for new proposals for C++0x is long past, work continues on TR2 and beyond, so new submissions remain welcome.

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.

Proposals 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
New Library Components Integrated into working paper
These propsals are already incorporated into the latest working paper, N2691, or the project editor has been directed to include them in the next draught. The majority were introduced by adopting the text of Library Technical Report 1 directly. For reference the original paper voted into the Library TR is listed in those cases, although actual wording comes from the TR which incorporates defect reports.
N2298 N2410 N2669 Thread-Safety in the Standard Library B. Dawes, P. Dimov, H. Sutter
N2096 N2179 Language Support for Transporting Exceptions between Threads Peter Dimov
N2066 N2174 N2241 Diagnostics Enhancements for C++0x Beman Dawes
N1403 tuple type for the standard library Jaakko Järvi
N1424 N1836 A Proposal to add Type Traits to the Standard Library John Maddock
N1402 N1836 Polymorphic Function Object Wrapper for the Standard Library Doug Gregor
N1450 N1836 General Purpose Smart Pointers P. Dimov, B. Dawes, G. Colvin
N2615 N2661 A Foundation to Sleep On Howard E. Hinnant, Walter E. Brown, Jeff Garland Marc Paterno
N1548 N1836 A Fixed Size Array Wrapper for the Standard Library Alisdair Meredith
N2231 N2448 N2543 STL singly linked lists Matt Austern
N1456 N1836 A Proposal to Add Hashtables to the Standard Library Matt Austern
N2569 N2666 More STL algorithms Matt Austern
N1588 N1914 N1932 N1933 N2032 N2033 N2079 N2111 Random Number Generation in C++0x: A Comprehensive Proposal M. Paterno, M. Fischler, W. Brown, J. Kowalkowski
N1429 N1836 Regular Expression for the Standard Library John Maddock
N2047 N2145 N2324 N2381 N2393 N2427 C++ Atomic Types and Operations H.-J. Boehm, L. Crowl
N2320 N2447 N2497 A Multi-threading Library for Standard C++ H. Hinnant, B. Dawes, L. Crowl, J. Garland, A. Williams et al.
N2549 Excision of Clause 31 Thomas Plum
New Language Support in the Working Paper
These propsals are already incorporated into the latest working paper, N2691, or the project editor has been directed to include them in the next draught. They all take advantage of some new language feature voted into the Core Language to improve the library experience - such as with stronger type safety, improved runtime performance or a richer set of semantics.
N1856 Rvalue Reference Recommendations for Chapter 20 Howard E. Hinnant
N1857 Rvalue Reference Recommendations for Chapter 21 Howard E. Hinnant
N1858 Rvalue Reference Recommendations for Chapter 23 Howard E. Hinnant
N1859 Rvalue Reference Recommendations for Chapter 24 Howard E. Hinnant
N1860 Rvalue Reference Recommendations for Chapter 25 Howard E. Hinnant
N1861 Rvalue Reference Recommendations for Chapter 26 Howard E. Hinnant
N1862 Rvalue Reference Recommendations for Chapter 27 Howard E. Hinnant
N2035 N2207 N2238 Minimal Unicode support for the standard library Matthew Austern
N2095 N2114 long long Goes to the Library Robert Klarer
N2151 N2192 Variadic Templates for the C++0x Standard Library D. Gregor, J. Järvi
N2194 decltype for the C++0x Standard Library D. Gregor, J. Järvi
N2219 N2288 N2349 Constant Expressions in the Standard Library G. Dos Reis, B. Stroustrup
N2220 N2679 Initializer Lists for Standard Containers G. Dos Reis, B. Stroustrup
N2292 Standard Library Applications for Deleted Functions Alisdair Meredith
N2293 N2434 Standard Library Applications for Explicit Conversion Operators Alisdair Meredith
N2435 Standard Library Applications for Explicit Conversion Operators (to smart pointers) Alisdair Meredith
N2459 N2547 Allow atomics use in signal handlers Hans-J. Boehm
Enhancements Integrated into working paper
These propsals are already incorporated into the latest working paper, N2691, or the project editor has been directed to include them in the next draught. Some of these papers are the result of defect reports, and might separately be tracked through the LWG Defect Report List. All are enhancements to existing library components, including those adopted as New Components above.
N2542 N2667 Reserved namespaces for POSIX Bejnamin Kosnik
N2383 N2440 Abandoning a Process Lawrence Crowl
N2509 N2559 Nesting Exception Objects Alisdair Meredith
N2296 N2415 N2422 Diagnostics Enhancements; Resolution of Small Issues B. Dawes, B. Kosnik, C. Kohlhoff
N1822 N2005 A maximum significant decimal digits value for numeric_limits Paul A Bristow
N1880 N2348 A proposal to extend numeric_limits for consistent range query Fernando Cacciola, Marc Paterno
N2244 Perfect forwarding for make_pair and make_tuple Thorsten Ottosen
N2299 Concatenating tuples Joe Gottman
N2028 N2157 N2255 Minor Modifications to the type traits Wording Howard E. Hinnant
N2069 N2244 Yet another type-trait: decay Thorsten Ottosen
N2240 Two missing traits: enable_if and conditional Benjamin Kosnik
N1454 A uniform method for computing function object return types Douglas Gregor
N1453 N1836 reference wrapper Doug Gregor, Peter Dimov
N1455 N1836 Enhanced Binders P. Dimov, D. Gregor, J. Järvi, G. Powell
N1432 N1836 Enhanced Member Pointer Adaptor Peter Dimov
N2308 Adding allocator support to std::function for C++0x Emil Dotchevski
N2436 Small Allocator Fix-ups Pablo Halpern
N2446 N2523 N2554 A Scoped Allocator Model Pablo Halpern
N2525 Allocator-specific swap and move behaviour Pablo Halpern
N2232 N2297 N2351 Improving shared_ptr for C++0x P. Dimov, B. Dawes
N2297 N2632 N2674 Atomic access to shared_ptr P. Dimov, B. Dawes
N1802 N1981 Uniform Use of std::string Pete Becker
N1803 N1982 N2408 Simple Numeric Access Pete Becker
N1683 N1957 N2007 ; N1750 Proposed Library Additions for Code Conversions P.J. Plauger ; Beman Dawes
N2401 Code Conversion Facets for the Standard C++ Library P.J. Plauger
N2070 N2211 N2321 Enhancing the time_get facet for POSIX® compatibility Martin Sebor
N1674 N1865 N1913 A Proposal to Improve const_iterator Use from C++0x Containers Walter E. Brown
N2217 N2268 N2345 Placement Insert for Containers Alan Talbot
N2642 N2680 Proposed Wording for Placement Insert Alan Talbot
N2256 N2350 Container insert/erase and iterator constness Matthew Austern, Alan Talbot
N2204 N2353 Specification for vector<bool> Alisdair Meredith
N1840 ; N1990 Function template std::minmax and / or algorithm std::minmax_element Hervé Brönnimann ; Howard E. Hinnant
N2485 N2551 A variadic std::min(T, ...) for the C++ Standard Library Sylvain Pion
N1870 N2099 N2246 14 3 2 crazy ideas for the standard library Thorsten Ottosen
N1568 N1836 Proposed C99 Library Additions to C++ P.J. Plauger
N2478 A Proposal to Add typedef default_random_engine to C++0X Walter E. Brown
N2259 Specify header dependency for <iostream> Howard E. Hinnant
N2071 Iostream manipulators for convenient extraction and insertion of struct tm objects Martin Sebor
N2072 Iostream manipulators for convenient extraction and insertion of monetary values Martin Sebor
N1842 N1991 Proposed Text for defaultfloat Paul A Bristow ; Howard E. Hinnant
N2514 Implicit Conversion Operators for Atomics Lawrence Crowl
N2636 N2678 Error Handling Specification for Chapter 30 (Threads) J. Garland, N. Stoughton, B. Kosnik, B. Dawes
Approved in principle
The following papers were approved by the Library Working Group, but held back one meeting to allow concerns to be investigated or missing language features to be supplied - similar to holding an issue at Ready status. They will automatically go on the motions list at the next meeting without further discussion, unless fresh concerns are raised.
N2502 N2572 N2621 N2677 Core Concepts for the C++0x Standard Library D. Gregor, A. Lumsdaine
N2637 Revisiting std::shared_ptr comparison Hervé Brönnimann
Joint endeavour with the Concurrency Working subgroup
The Concurrency Subgroup has been working as part of the Evolution Working Group process to deliver on the key goals of C++0x. These papers mark the jointr area of concern for these groups, and it is now a priority that these are reviewed and adopted at the next two meetings if we are to deliver a new standard in 2009.
N2275 Non-Memory Actions (Library) Nick Maclaren
N2534 N2647 N2668 Concurrency Modifications to basic_string A. Meredith, H. Boehm, L. Crowl, P. Dimov, D. Krügler
N2361 N2493 N2643 C++ Data-Dependency Ordering: Function Annotation Paul E. McKenney, L. Crowl
N2633 Improved support for bidirectional fences Peter Dimov
N2528 Timed_mutex in C++0x Hans-J. Boehm
N2561 N2627 N2671 An Asynchronous Return Buffer D. Vollmann, H. Hinnant, A. Williams
New Language Support Planned for C++0x
These propsals take advantage of some new language feature, either voted into the Core Language or anticipated for the Final Candidate Document.
N2037 N2618 Concepts for the C++0x Standard Library: Introduction B. Dawes, D. Gregor, J. Willcock, A. Lumsdaine
N2619 Concepts for clause 18 Alisdair Meredith
N2620 Concepts for the C++0x Standard Library: Diagnostics library B. Dawes, D. Krügler, D. Gregor
N2038 N2082 N2322 N2622 Concepts for the C++0x Standard Library: Utilities D. Gregor, J. Willcock, A. Lumsdaine
N2641 N2654 Allocator Concepts Pablo Halpern
N2085 N2623 N2694 Concepts for the C++0x Standard Library: Containers D. Gregor, M. Marcus, P. Halpern
N2039 N2083 N2323 N2500 N2570 N2624 N2695 Concepts for the C++0x Standard Library: Iterators D. Gregor, J. Willcock, A. Lumsdaine, J. Siek
N2040 N2084 N2573 N2625 N2696 Concepts for the C++0x Standard Library: Algorithms D. Gregor, M. Marcus, T. Witt, J. Willcock, A. Lumsdaine
N2041 N2574 N2626 Concepts for the C++0x Standard Library: Numerics D. Gregor, J. Willcock, A. Lumsdaine
N2645 Fundamental Mathematical Concepts for the STL in C++0x P. Gottschling, W. Brown
N2245 Range Utilities for C++0x Thorsten Ottosen
N2693 Requirements on programs and backwards compatibility Jens Maurer
Updates Planned for C++0x
While these papers have not been adopted yet, they propose updates and enhancement for existing library components for the next C++ Standard, or revisions of already adopted new features.
N2479 Normative Language to Describe Value Copy Semantics John Lakos
N2530 Making It Easier to Use std::type_info as an Index in an Associative Container James Kanze
N2533 Tuples and Pairs Alisdair Meredith
N2486 Alternative Allocators and Standard Containers Lance Diduck
N2233 basic_string operator << Lawrence Crowl
N1847 ; N2160 ; N2204 Library Issue 96: Fixing vector<bool> Herb Sutter ; Beman Dawes ; Alisdair Meredith
N2590 Simplifying swap overloads Alisdair Meredith
N2014 C99 and POSIX(2001) Compatibility Nick Maclaren
N2649 Proposed Resolution for Valarray Constructors Gabriel Dos Reis
N2186 Some Small Additions to iostream James Kanze
N2629 N2655 Detailed Reporting for Input/Output Library Errors Beman Dawes
N2683 issue 454: problems and solutions Martin Sebor
Reference Papers
These papers are intended to guide or inform authors in developing libraries targetting either the Standard or a Technical Report. While they contain no formal proposals, they still offer value for the process as a whole.
N1940 Why POSIX Threads Are Unsuitable for C++ Nick Maclaren
N2089 Asynchronous Exceptions for Threads Nick Maclaren
N2455 Thread Cancellation WG14
N2139 Thoughts on a Thread Library for C++ Anthony Williams
N2406 Mutex, Lock, Condition Variable Rationale Howard E. Hinnant
N2121 Proposed Improvements to the Presentation of Requirements for Functions Alan Talbot
N1344 Namespaces and Library Versioning Herb Sutter
N1356 Predictable data layout for certain non-POD types R.W. Grosse-Kunstleve & D. Abrahams
N2004 Impact of Language Changes on LWG Schedule Beman Dawes
N2051 Evolution of the C++ Standard Library Alisdair Meredith
N2270 Incompatible changes in C++0x B. Kosnik, M. Austern
N2271 EASTL -- Electronic Arts Standard Template Library Paul Pedriana
N2036 Concepts for the C++0x Standard Library: Approach D. Gregor, J. Willcock, A. Lumsdaine
N2480 A Less Formal Explanation of the Proposed C++ Concurrency Memory Model Hans-J. Boehm
N2516 Threads API Review Committee Report Hans-J. Boehm
Evolution of proposals for C++0x
These papers are the inspiration or history behind the active or accepted proposals. They are retained here as they capture a large part of the rationale that will produce C++0x. Note that the resolution for many of these papers was applied through the Defect Reporting mechanism, rather than adoptiong specific papers.
N2519 Library thread-safety from a user's point of view Jeffrey Yasskin
N2158 LWG Issue 206: Linking new/delete operators Howard E. Hinnant
N2587 Minimal Garbage Collection Status API H.-J. Boehm, M. Spertus
N2061 N2106 N2229 Cloning and Throwing Dynamically Typed Exceptions Beman Dawes
N2107 Exception Propagation across Threads J. Maurer, A. Meredith
N1599 Issue 431: Swapping containers with unequal allocators Howard E. Hinnant
N1850 N2387 Towards a Better Allocator Model Pablo Halpern
N1851 Improving Usability and Performance of TR1 Smart Pointers V. Kliatchko, I. Rocha
N2602 BSI Requirements for a system-time library in C++0x A. Meredith, R. Orr, A. Williams
N2328 N2411 Proposal for Date-Time Types in C++0x To Support Threading APIs Jeff Garland
N2498 Custom Time Duration Support H. Hinnant, J. Garland
N2526 Why duration Should Be a Type in C++0X W. Brown, M. Paterno
N2539 A New Interface for C++ std::duration Type P. McKenney, M. Wong
N2552 Using ytime for Times in the Thread Support Library Pete Becker
N1477 N1531 N1550 N1640 New Iterator Concepts D. Abrahams, J. Siek, T. Witt
N1672 Adapting N1640 To C++0x Pete Becker
N1780 Comments on LWG issue 233: Insertion hints in associative containers Howard E. Hinnant
N1398 N1452 A Proposal to Add an Extensible Random Number Facility to the Standard Library Jens Maurer
N2391 N2423 N2424 Recommendations for Resolving Issues re [rand] Walter E. Brown
N2424 Recommendations for Resolving the 2007-09-21 Issues re [rand] Walter E. Brown
N1835 <stdint.h> for C++ Steve Clamage
N2022 Input & Output of NaN and infinity for the C++ Standard Library Paul A Bristow
N1388 Enhancing numerical support Gabriel Dos Reis
N1589 complex and issue 387 Howard E. Hinnant
N2327 Inconsistencies in IOStreams Numeric Extraction Cosmin Truta
N2409 Proposed Resolutions for the Outstanding Issues in Chapter 28: Regular expressions library John Maddock
N2195 Proposed Text for Chapter 29, Atomic Operations Library [atomics] Peter Dimov
N2362 Converting Memory Fences to N2324 Form P. McKenney, L. Crowl
N1682 N1907 N2285 A Multi-threading Library for Standard C++ Pete Becker
N1875 C++ Threads Lawrence Crowl
N1883 Preliminary Threading Library Proposal for TR2 Kevlin Henney
N2090 N2178 A Threading API for C++ Peter Dimov
N2094 N2184 Multi-threading Library for Standard C++ H. Hinnant
N2043 Simplifying And Extending Mutex and Scoped Lock Types For C++ Multi-Threading Library Ion Gaztañaga
N1569 Proposed fixes to library inconsistencies P.J. Plauger
N2183 Issues From Batavia Howard E. Hinnant

A Note on Technical Reports

The Library Working Group is committed to an ongoing process of releasing Technical Reports. It is intended that all new library functionality should be validated through a TR before being advanced into future revisions of the standard.

As there will be a continuing series of TRs there is no hard cut-off date for when proposals will be accepted. Once a proposal is ready it will ship as part of the next available TR. There will be natural 'quiet periods' where proposals are accumulating with little attention though, as work focusses on shipping accepted proposals in the next standard, or the next TR.

New Library Components Accepted into TR2
These propsals for new library components have full reviewed wording and have been voted into TR2 by the full committee. We do not yet have a draught TR at this early stage of the process, where attention is still focussed on C++0x.
N1576 N1841 N1889 N1934 N1975 Filesystem Library Proposal Beman Dawes
New Library Components Planned for a Future TR
These papers present libraries that are actively under consideration for a future TR. The Library Working Group is committed to an ongoing process of TRs, adopting libraries 'when they are ready'. As such, there is no target TR number associated with any given proposal.
N1974 N2054 N2175 Networking Library Proposal for TR2 Christopher Kohlhoff
N1843 N2067 N2137 A Proposal to add Interval Arithmetic to the C++ Standard Library H. Brönnimann, G. Melquiond, S. Pion
N1871 Range Library Proposal Thorsten Ottosen
N2068 Range Library Core Thorsten Ottosen
N1872 N2059 Proposal for new string algorithms P. Droba, T. Ottosen
N1873 The Cursor/Property Map Abstraction D. Kühl, D. Abrahams
N1878 A proposal to add an utility class to represent optional objects Fernando Cacciola
N1879 A proposal to add a general purpose ranged-checked numeric_cast<> Fernando Cacciola
N1900 N2058 Proposal to Add Date-Time to the C++ Standard Library Jeff Garland
N1939 Any Library Proposal for TR2 B. Dawes, K. Henney
N1973 Lexical Conversion Library Proposal for TR2 K. Henney, B. Dawes
N2044 Memory Mapped Files And Shared Memory For C++ Ion Gaztañaga
N2046 N2136 Bool_set: multi-valued logic H. Brönnimann, G. Melquiond, S. Pion
N2065 A proposal to add stream objects based on fixed memory buffers Alberto Ganesh Barbati
N2086 Signals and Slots for Library TR2 Douglas Gregor
N2101 Hierarchical Data Structures and Related Concepts for the C++ Standard Library B. Reiter, R. Rivera
N2104 A Proposal to Add Parallel Iteration to the Standard Library Arch D. Robison
N2185 Proposed Text for Parallel Task Execution Peter Dimov
N2276 Thread Pools and Futures Anthony Williams
N2050 Proposal to Add a Dynamically Sizeable Bitset to the Standard Library J. Allsop, A. Meredith, G. Prota
N2648 C++ Dynamic Arrays L. Crowl, M. Austern
N2650 Toward a More Complete Taxonomy of Algebraic Properties for Numeric Libraries in TR2 P. Gottschling, W. Brown
N2639 Algorithms for permutations and combinations, with and without repetitions Hervé Brönnimann
Evolution of papers targetting future TRs
These papers are the inspiration or history behind the active or accepted proposals. They are retained here as they capture a large part of the rationale that will produce TR2 and beyond.
N1838 A Proposal to Add Sockets to the Standard Library Joseph S. Berríos
N1925 Networking proposal for TR2 (rev. 1) Gerhard Wesp
Papers With an Open Status
These papers have been reviewed by the LWG, and while not yet compelling enough to plan for a future TR, they have not been outright rejected either. Authors are welcome to update and resubmit.
N1668 A Proposal to add Mathematical Functions for Statistics to the C++ Standard Library Paul A Bristow
N1425 Proposal for Technical Report on C++ Standard Library Security Martyn Lovell
N1461 Security and Standard C Libraries Martyn Lovell
N1744 Big Integer Library Proposal for C++0x Michiel Salters
N1724 A Library Approach to Initialization Thorsten Ottosen
N1476 N1530 N1641 Iterator Facade and Adaptor D. Abrahams, J. Siek, T. Witt
N2225 Improved integration with C arrays and strings Thorsten Ottosen
N2388 Pointer Arithmetic for shared_ptr Pablo Halpern
N2600 N2675 noncopyable utility class Alisdair Meredith
Proposals Rejected by LWG
These proposals have been evaluated and actively rejected. The Library Working Group has no further interest in these proposals.
N1681 N1739 Adding a Policy-Based Smart Pointer Framework to the Standard Library David B. Held
N1692 N2020 N2143 Proposal for an Infinite Precision Integer M.J. Kronenburg
N1718 A Proposal to add the Infinite Precision Integer and Rational to the C++ Standard Library M.J. Kronenburg
N2144 Proposal for exact specification of is modulo M.J. Kronenburg
N2199 Improved min/max Howard E. Hinnant
N2206 Consistent Insertion into Standard Containers Alisdair Meredith
N2212 Support for sequence in-place construction Thorsten Ottosen
N2023 erase(iterator) for unordered containers should not return an iterator Joaquín Mª López Muñoz
N1953 N2045 Improving STL Allocators Howard Hinnant ; Ion Gaztañaga
N2257 Removing unused allocator functions Matthew Austern
N2339 Response to N2257=07-0117 "Removing unused allocator functions" Detlef Vollmann
N2524 Conservative Swap and Move with Stateful Allocators Pablo Halpern
N1612 How we might remove the remaining shortcomings of std::complex<T> Thorsten Ottosen
N1869 Wording for imaginary numbers Thorsten Ottosen
N2503 Indicating iostream failures with system_error A. Meredith, B. Dawes
N2538 Removal of System error support Benjamin Kosnik
N2604 Thoughts on Implementing errno as a Macro Nick Stoughton
N2580 Some More Small Additions to iostream James Kanze
N2591 Refactoring numeric_limits Alisdair Meredith, Fabien Oram
N2303 Revised system_error Benjamin Kosnik
N2309 Error-handling and Exception-related library changes for C++0x Benjamin Kosnik
N2638 Improving the wording of std::shared_ptr Hervé Brönnimann