Document number: N2566=08-0078

Alisdair Meredith

C++ Library Working Group Status Report (Post-Bellevue 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 pre-Bellevue 2008 mailing.

There is a minimal crossover with the State of Evolution paper N2565 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 the new standard in 2008, in order to achieve publication in 2009. To meet this timetable the plan is to vote out a feature complete Working Draught at the next meeting at Sophia-Antipolis in June. An FCD will be issued from the following meeting, allowing at least a minimal time for review and 'integration testing' of the new features.

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, subject to further Library Working Group efforts to provide an agreed replacement (potentially the same as the original) at the next meeting.

A second proposed compromise to meet the timetable is the scaling back of the garbage collection feature. The reduced feature and API was reviewed by both Evolution and Library working groups in Bellevue and is proceeding as planned.

The third compromise of a reduce scope 'asynchronous return buffer' was presented to the Library Working Group in Bellevue, and a paper should be available in this same mailing.

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, N2521, 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.
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
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
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.
New Language Support in the Working Paper
These propsals are already incorporated into the latest working paper, N2521, 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
N2292 Standard Library Applications for Deleted Functions Alisdair Meredith
N2293 N2434 Standard Library Applications for Explicit Conversion Operators Alisdair Meredith
N2459 Allow atomics use in signal handlers Hans-J. Boehm
Enhancements Integrated into working paper
These propsals are already incorporated into the latest working paper, N2521, 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.
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
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
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
Endorsed by Library Working Group
The following paper was approved by the Library Working Group during the Bellevue meeting, but due to an administration error did not proceed to formal motions in front of full committee. It will automatically go on the motions list at the next meeting without further discussion, unless a fresh objection is raised.
N2514 Implicit Conversion Operators for Atomics Lawrence Crowl
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.
N2275 Non-Memory Actions (Library) Nick Maclaren
N2298 N2410 Thread-Safety in the Standard Library B. Dawes, P. Dimov, H. Sutter
N2519 Library thread-safety from a user's point of view Jeffrey Yasskin
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
N2303 Revised system_error Benjamin Kosnik
N2309 Error-handling and Exception-related library changes for C++0x Benjamin Kosnik
N2533 Tuples and Pairs Alisdair Meredith
N2486 Alternative Allocators and Standard Containers Lance Diduck
N2524 Conservative Swap and Move with Stateful Allocators Pablo Halpern
N2481 N2527 Minimal Support for Garbage Collection and Reachability-Based Leak Detection H.-J. Boehm, M. Spertus
N2297 Improving shared_ptr for C++0x parts VI and VII P. Dimov, B. Dawes
N2388 Pointer Arithmetic for shared_ptr Pablo Halpern
N2233 basic_string operator << Lawrence Crowl
N1847 ; N2160 ; N2204 Library Issue 96: Fixing vector<bool> Herb Sutter ; Beman Dawes ; Alisdair Meredith
N2014 C99 and POSIX(2001) Compatibility Nick Maclaren
N2186 Some Small Additions to iostream James Kanze
N2327 Inconsistencies in IOStreams Numeric Extraction Cosmin Truta
N2492 C++ Data-Dependency Ordering: Atomics and Memory Model P. McKenney, H.-J. Boehm, L. Crowl
N2528 Timed_mutex in C++0x Hans-J. Boehm
D2443 D2561 An Asynchronous Return Buffer Detlef Vollmann
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
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 Concepts for the C++0x Standard Library: Introduction D. Gregor, J. Willcock, A. Lumsdaine
N2502 Core Concepts for the C++0x Standard Library D. Gregor, A. Lumsdaine
N2038 N2082 N2322 Concepts for the C++0x Standard Library: Utilities D. Gregor, J. Willcock, A. Lumsdaine
N1672 ; N2039 N2083 N2323 N2500 Concepts for the C++0x Standard Library: Iterators Pete Becker ; D. Gregor, J. Willcock, A. Lumsdaine, J. Siek
N2040 N2084 Concepts for the C++0x Standard Library: Algorithms D. Gregor, J. Willcock, A. Lumsdaine
N2041 Concepts for the C++0x Standard Library: Numerics D. Gregor, J. Willcock, A. Lumsdaine
N2085 Concepts for the C++0x Standard Library: Containers Douglas Gregor
N2245 Range Utilities for C++0x Thorsten Ottosen
N2435 Standard Library Applications for Explicit Conversion Operators Alisdair Meredith
N2220 Initializer Lists for Standard Containers G. Dos Reis, B. Stroustrup
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.
N2158 LWG Issue 206: Linking new/delete operators Howard E. Hinnant
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
N1477 N1531 N1550 N1640 New Iterator Concepts D. Abrahams, J. Siek, T. Witt
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
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
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
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
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