Standardization

P0143R0: Wording for Modules -- Gabriel Dos Reis

New WG21 papers are available. If you are not a committee member, please use the comments section below or the std-proposals forum for public discussion.

Document number: P0143R0

Date: 2015-11-30

Wording for Modules

by Gabriel Dos Reis

Excerpt:

This documents provides formal wording for a module system for C++. This document is to be read in conjunction with document P0142R0 “A Module System for C++”. The proposed wording are with respect to WG21 Committee Draft (N4567)

2015-11 post-Kona mailing available

The 2015-11 mailing of new standards papers is now available.

NOTE: A number of these papers have already been publicized on this blog. This is the complete list including ones not previously publicized.

 

WG21 Number Title Author Document Date Mailing Date Previous Version Subgroup Disposition
SD-1 2015 PL22.16/WG21 document list John Spicer 2015-11-16 2015-11      
2015-11 post-Kona
N4553 Working Draft, C++ extensions for Concepts Andrew Sutton 2015-10-02 2015-11 N4549 Concepts  
N4554 Editor's report for the Concepts TS Andrew Sutton 2015-10-02 2015-11   Concepts  
N4555 February 2016 WG21 Meeting Barry Hedquist 2015-10-09 2015-11      
N4556 WG21 telecon minutes Marhsall Clow 2015-10-09 2015-11      
N4557 WG21 2015-07-20 Telecon (revised) Roger Orr 2015-10-24 2015-11      
N4558 Kona WG21 Minutes Jonathan Wakely 2015-11-16 2015-11      
N4559 Kona PL22.16 Minutes Jonathan Wakely 2015-11-16 2015-11      
N4560 Working Draft, C++ Extensions for Ranges Eric Niebler, Casey Carter 2015-11-06 2015-11      
N4561 Ranges Editor's Report Eric Niebler 2015-11-05 2015-11      
N4562 Working Draft, C++ Extensions for Library Fundamentals, Version 2 Geoffrey Romer 2015-11-05 2015-11 N4529    
N4563 Editor's Report for the Library Fundamentals TS Geoffrey Romer 2015-11-05 2015-11      
N4564 C++ Extensions for Library Fundamentals, Version 2 PDTS Geoffrey Romer 2015-11-05 2015-11      
N4565 Record of Response: National Body Comments ISO/IEC PDTS 19571 Technical Specification: C++ Extensions for Concurrency Barry Hedquist 2015-11-06 2015-11      
N4566 Editor's Report -- Working Draft, Standard for Programming Language C++ Richard Smith 2015-11-09 2015-11      
N4567 Working Draft, Standard for Programming Language C++ Note: Richard Smith 2015-11-09 2015-11 N4527    
P0001R1 Removing Deprecated Register Keyword Alisdair Meredith 2015-10-21 2015-11 P0001R0 Core Adopted 2015-10
P0002R1 Removing Deprecated Operator++ for bool Alisdair Meredith 2015-10-23 2015-11 P0002R0 Core Adopted 2015-10
P0004R1 Removing Deprecated Aliases in iostreams Alisdair Meredith 2015-10-19 2015-11 P0004R0 Library Evolution  
P0005R1 Adopt not_fn from Library Fundamentals 2 for C++17 Alisdair Meredith, Stephan T. Lavavej, Tomasz Kamiński 2015-10-18 2015-11 P0005R0 Library Revised P0005R2
P0005R2 Adopt not_fn from Library Fundamentals 2 for C++17 Alisdair Meredith, Stephan T. Lavavej, Tomasz Kamiński 2015-10-23 2015-11 P0005R1 Library  
P0007R1 Constant View: A proposal for a std::as_const helper function template ADAM David Alan Martin, Alisdair Meredith 2015-10-22 2015-11 P0007R0 Library Evolution  
P0012R1 Make exception specifications be part of the type system, version 5 Jens Maurer 2015-10-22 2015-11 P0012R0   Adopted 2015-10
P0013R1 Logical Operator Type Traits (revison 1) Jonathan Wakely 2015-10-23 2015-11 P0013R0 Library Evolution Adopted 2015-10
P0014R1 Proposal to add the multiline option to std::regex for its ECMAScript engine Nozomu Katō 2015-10-30 2015-11 P0014R0 Library Evolution  
P0017R1 Extension to aggregate initialization Oleg Smolsky 2015-10-24 2015-11 P0017R0 Evolution  
P0018R1 Lambda Capture of *this by Value H. Carter Edwards, Christian Trott, Hal Finkel, Jim Reus, Robin Maffeo, Ben Sander 2015-10-23 2015-11 P0018R0 Evolution  
P0022R1 Proxy Iterators for the Ranges Extensions Eric Niebler 2015-11-06 2015-11 P0022R0 Library  
P0025R1 An algorithm to "clamp" a value between a pair of boundary values Martin Moene, Niels Dekker 2015-10-29 2015-11 P0025R0 Library  
P0030R1 Proposal to Introduce a 3-Argument Overload to std::hypot Benson Ma 2015-11-06 2015-11 P0030R0 Library  
P0032R1 Homogeneous interface for variant, any and optional (Revision 1) Vicente J. Botet Escriba 2015-11-05 2015-11 P0032R0 Library Evolution  
P0051R1 C++ generic overload function (Revision 1) Vicente J. Botet Escriba 2015-11-05 2015-11 P0051R0 Library Evolution  
P0057R1 Wording for Coroutines Gor Nishanov 2015-11-06 2015-11 P0057R0 Core, Library Evolution  
P0061R1 __has_include for C++17 Clark Nelson 2015-10-23 2015-11 P0061R0   Adopted 2015-10
P0083R1 Splicing Maps and Sets (Revision 3) Alan Talbot, Jonathan Wakely, Howard Hinnant, James Dennett 2015-11-07 2015-11 P0083R0 Library Evolution  
P0092R1 Polishing Howard Hinnant 2015-10-20 2015-11 P0092R0 Library Evolution  
P0100R1 Comparison in C++ Lawrence Crowl 2015-11-07 2015-11 P0100R0 Library Evolution  
P0112R1 Networking Library (Revision 7) Christopher Kohlhoff 2015-10-23 2015-11 P0112R0 Library Evolution Adopted 2015-10
P0136R1 Rewording inheriting constructors (core issue 1941 et al) Richard Smith 2015-10-19 2015-11 P0136R0 Core Adopted 2015-10
P0144R0 Structured Bindings Herb Sutter 2015-10-14 2015-11   Evolution  
P0145R0 Expression Order of Evaluation Gabriel Dos Reis, Herb Sutter, Jonathan Caves 2015-10-01 2015-11   Evolution  
P0147R0 The Use and Implementation of Contracts Lawrence Crowl 2015-11-08 2015-11   Evolution  
P0148R0 memory_resource_ptr: A Limited Smart Pointer for memory_resource Correctness Pablo Halpern, Dietmar Kühl 2015-10-14 2015-11   Library Evolution  
P0151R0 Proposal of Multi-Declarators Andrew Tomazos 2015-10-16 2015-11   Evolution  
P0152R0 constexpr atomic::is_always_lock_free Olivier Giroux, JF Bastien, Jeff Snyder 2015-10-21 2015-11 N4509 Concurrency  
P0153R0 std::atomic_object_fence(mo, T&&...) Olivier Giroux, JF Bastien 2015-11-05 2015-11 N4522    
P0154R0 constexpr std::thread::hardware_{true,false}_sharing_size JF Bastien, Olivier Giroux 2015-10-24 2015-11 N4523    
P0155R0 Task Block R5 Pablo Halpern, Arch Robison, Hong Hong, Artur Laksberg, Gor Nishanov, Herb Sutter 2015-10-22 2015-11 N4411 Library Adopted 2015-10
P0156R0 Variadic lock_guard (Rev. 3) Mike Spertus 2015-10-21 2015-11 N4498 Evolution  
P0157R0 Handling Disappointment in C++ Lawrence Crowl 2015-11-07 2015-11   Evolution  
P0158R0 Couroutines belong in a TS Jamie Allsop, Jonathan Wakely, Christopher Kohlhoff, Anthony Williams, Roger Orr, Andy Sawyer, Jonathan Coe, Arash Partow 2015-11-06 2015-11   Evolution  
P0159R0 Draft of Technical Specification for C++ Extensions for Concurrency Artur Laksberg 2015-10-22 2015-11     Adopted 2015-10
P0160R0 Wording for removing defaults for unary folds Jens Maurer 2015-10-23 2015-11   Core  
P0162R0 A response to "P0055R0: On Interactions Between Coroutines and Networking Library" Christopher Kohlhoff 2015-11-06 2015-11      
P0163R0 shared_ptr::weak_type Arthur O'Dwyer 2015-10-23 2015-11   Library Evolution  
P0164R0 Core Language Working Group "ready" Issues William M. Miller 2015-10-23 2015-11   Core Adopted 2015-10
P0165R0 C++ Standard Library Issues to be moved in Kona Marshall Clow 2015-10-23 2015-11   Library Adopted 2015-10
P0166R0 Three interesting questions about contracts J. Daniel Garcia 2015-11-06 2015-11   Evolution  
P0167R0 Core Language Working Group "ready" Issues after the October, 2015 (Kona) meeting William M. Miller 2015-11-10 2015-11   Core  
P0169R0 regex and Unicode character types Nozomu Katō 2015-11-03 2015-11   Library evolution  
P0170R0 Wording for Constexpr Lambda Faisal Vali 2015-11-01 2015-11 N4487 Evolution  
P0171R0 Response To: Resumable Expressions P0114R0 Gor Nishanov 2015-11-06 2015-11   Evolution  
P0172R0 Abominable Function Types Alisdair Meredith 2015-11-10 2015-11   Library Evolution  

 

Trip Report: C++ Standards Meeting in Kona, October 2015--Botond Ballo

Another trip report of the last meeting in Kona:

Trip Report: C++ Standards Meeting in Kona, October 2015

by Botond Ballo

From the article:

Last week I attended a meeting of the ISO C++ Standards Committee in Kona, Hawaii. This was the second committee meeting in 2015; you can find my reports on the past few meetings here (June 2014, Rapperswil), here (November 2014, Urbana-Champaign), and here (May 2015, Lenexa). These reports, particularly the Lenexa one, provide useful context for this post.

The focus of this meeting was primarily C++17. There are many ambitious features underway for standardization, and the time has come to start deciding what which of them will make C++17 and which of them won’t. The ones that won’t will target a future standard, or a Technical Specification (which can eventually also be merged into a future standard). In addition, there are a number of existing Technical Specifications in various stages of completion...

The Variant Saga: A happy ending?

Variant is like a union, only it tells you what it currently contains, and it will barf if you try to get something out of it that is does not currently contain. It's the type safe sibling of the union:

variant<double, string> v = 42.;
double d = get<double>(v);

I had proposed a variant many moons ago (N4218). After many discussions it seemed that the committee cannot agree on what the ideal C++ variant would look like. I will resolve this cliffhanger -- but before doing that let me introduce you to some of the key discussion points.

An ideal variant will always contain one of its alternative types. But look at this code snippet:

variant<string, MyClass> v = "ABC";
v = MyClass();

The second line will destroy the old value contained in the variant and construct the new value of a different type. Now suppose that the MyClass construction threw: what will the variant contain? What happens when you call get<1>(v)? What happens when the variant gets destroyed?

We either provide the strong exception guarantee (the variant would still contain the string) -- but this requires double buffering, as for instance boost::variant does. Or we could restrict the alternative types to only those that are nothrow_move_constructible. Or we make this a new state -- "invalid, because the variant has been derailed due to an exception thrown during type changing assignment". Or we say "you shouldn't write code that behaves like this; if you do you're on your own", i.e. undefined behavior. The committee was discussing what to do, and so was The Internet. There are other design decisions -- default construction, visitation etc -- but they are all insignificant compared to how to deal with the throwing, type-changing assignment.

I have tried to present the options and their pros and cons in P0086. In short: it's incredibly difficult and fragile to predict whether a type is_nothrow_move_constructible. And double buffering -- required for a strong exception guarantee -- kills the quest for an efficient variant. But efficiency is one of the main motivations for using a discriminated union.

After the second Library Evolution Working Group (LEWG) review in Lenexa, we got P0088R0: a design that was making this invalid state extremely rare. But if it happened, access to the value would result in undefined behavior. This caused a vivid reaction from the committee members. And from The Internet. Hundreds of emails on the committee email lists. Many many smart and convincing blog posts.

In the end, different parts of the committee strongly supported different designs -- and vetoing other designs. Massive disagreement. So when we came to our C++ Standards Meeting in Kona, it was immediately clear that we needed to expose this to the full committee (and not just LEWG). The expectation was that we would declare variant dead, and keep it locked away for the next five years. At least. (An I would have time to water my fishes again.)

So back to the cliffhanger. On the full committee, Monday evening stage in Kona were David Sankel and I. We presented (and represented) the different design options. While we were discussing with the committee members, live and uncut and on stage, David and I realized that we could make it happen. "The Kona Kompromise": similar to P0088R0, but instead of undefined behavior when extracting the value of such a zombie variant it would just throw!

The Kona Kompromise means that we don't pay any efficiency for the extremely rare case of a throwing move. The interface stays nice and clean. A variant of n alternatives is a "mostly" an n-state type. It offers the basic exception guarantee at no relevant performance loss. It is a safe vocabulary type for every-day use, also for novices. The vast majority of the committee was convinced by this idea. Almost everyone in the room was happy!

Do we have a std::variant now? Not yet. But we are a giant leap closer: variant is now under wording review with the Library Working Group (LWG); I will publish a new revision in the Kona post-mailing (P0088R1). This will get re-reviewed in Jacksonville, first week of March. Once LWG gives the green light, the full committee can vote variant into a Technical Specification (TS) as std::experimental::variant. Now that a large fraction of the committee has expressed its consent (happiness, even!), I expect that this will be in the TS called Library Fundamentals, v3. It might or might not make it into C++17 -- that depends mostly on how quickly I manage to bring P0088 into an acceptable state, and how quickly we will gain use experience with variant.

So there is one thing I'd really appreciate your help with: std::experimental::variant will show up in library implementations near you, likely in their first releases next year. It would be fantastic if you could try it out, and as importantly: give feedback, on the public forums or by contacting me directly (axel@cern.ch). Your feedback will tell us whether the design decisions we took are the right ones, for instance regarding default construction, visitation, performance, and especially converting construction and assignment. As they say here: Mahalo!

Axel Naumann, CERN (axel@cern.ch)

 

2015-09 pre-Kona mailing available

The 2015-09 mailing of new standards papers is now available.

NOTE: A number of these papers have already been publicized on this blog. This is the complete list including ones not previously publicized.

 

WG21 Number Title Author Document Date Mailing Date Previous Version Subgroup Disposition
SD-1 2015 PL22.16/WG21 document list John Spicer 2015-09-29 2015-09      
2015-09 pre-Kona
N4545 PL22.16/WG21 draft agenda: 19-24 Oct 2015, Kona, HI/US Clark Nelson 2015-06-04 2015-09      
N4546 Agenda and Meeting Notice for WG21 Concepts Telecon Herb Sutter 2015-06-29 2015-09      
N4547 Business Plan and Convener's report Herb Sutter 2015-07-13 2015-09      
N4548 WG21 2015-07-20 Telecon Minutes Roger Orr 2015-07-20 2015-09      
N4549 Programming Languages -- C++ Extensions for Concepts Andrew Sutton 2015-07-27 2015-09      
N4550 Record of Response: National Body Comments on ISO/IEC PDTS 19217, Technical Specification: C++ Extensions for Concepts Barry Hedquist 2015-07-25 2015-09      
N4551 National Body Comments, ISO/IEC PDTS 19571, C++ Extensions for Concurrency Barry Hedquist 2015-08-13 2015-09      
N4552 Pre-Kona WG21 Telecon Herb Sutter 2015-09-28 2015-09      
P0001R0 Removing Deprecated Register Keyword Alisdair Meredith 2015-09-28 2015-09   Core  
P0002R0 Removing Deprecated Operator++ for bool Alisdair Meredith 2015-09-28 2015-09   Core  
P0003R0 Removing Deprecated Dynamic Exception Specifications Alisdair Meredith 2015-09-28 2015-09   Evolution  
P0004R0 Removing Deprecated Aliases in iostreams Alisdair Meredith 2015-09-28 2015-09   Library Evolution  
P0005R0 Adopt not_fn from Library Fundamentals 2 for C++17 Alisdair Meredith 2015-09-28 2015-09   Library  
P0006R0 Adopt Type Traits Variable Templates from Library Fundamentals TS for C++17 Alisdair Meredith 2015-09-28 2015-09   Library  
P0007R0 Constant View: A proposal for a std::as_const helper function template Alisdair Meredith 2015-09-28 2015-09   Library Evolution  
P0008R0 C++ Executors Chris Mysen 2015-09-27 2015-09   Concurrency  
P0009R0 Polymorphic Multidimensional Array View H. Carter Edwards, Christian Trott, Juan Alday, Jesse Perla, Mauro Bianco, Robin Maffeo, Ben Sander, Bryce Lelbach 2015-09-23 2015-09   Library Evolution  
P0011R0 Additions to Filesystem supporting Relative Paths Jamie Alsop 2015-09-25 2015-09   File System  
P0012R0 Make exception specifications be part of the type system, version 4 Jens Maurer 2015-09-08 2015-09 N4533 Core  
P0013R0 Logical Operator Type Traits Jonathan Wakely 2015-07-05 2015-09   Library Evolution  
P0014R0 Proposal to add the multiline option to std::regex for its ECMAScript engine Nozomu Kato 2015-07-11 2015-09   Library Evolution  
P0015R0 A specialization-friendly std::common_type David Stone 2015-08-13 2015-09   Library Evolution  
P0017R0 Extension to aggregate initialization Oleg Smolsky 2015-07-13 2015-09 N4404 Evolution  
P0018R0 Lambda Capture of *this by Value H. Carter Edwards, Christian Trott, Hal Finkel, Jim Reus, Robin Maffeo, Ben Sander 2015-09-23 2015-09   Evolution  
P0019R0 Atomic View H. Carter Edwards, Hans Boehm, Olivier Giroux, James Reus 2015-09-23 2015-09   Concurrency  
P0020R0 Floating Point Atomic View H. Carter Edwards, Hans Boehm, Olivier Giroux, JF Bastien, James Reus 2015-09-23 2015-09   Concurrency  
P0021R0 Working Draft, C++ Extensions for Ranges Eric Niebler, Casey Carter 2015-09-28 2015-09   Library Evolution  
P0022R0 Proxy Iterators for the Ranges Extensions Eric Niebler 2015-06-30 2015-09   Library Evolution  
P0024R0 The Parallelism TS Should be Standardized Jared Hoberock 2015-09-25 2015-09   Concurrency  
P0025R0 An algorithm to "clamp" a value between a pair of boundary values Martin Moene, Niels Dekker 2015-09-18 2015-09 N4536 Library Evolution  
P0026R0 multi-range-based for loops Matthew McAtamney-Greenwood 2015-08-11 2015-09   Evolution  
P0027R0 Named Types Troy Korjuslommi   2015-09   Evolution  
P0028R0 Using non-standard attributes J. Daniel Garcia, Luis M. Sanchez, Massimo Torquati, Marco Danelutto, Peter Sommerlad 2015-09-15 2015-09   Evolution  
P0029R0 A Unified Proposal for Composable Hashing Geoff Romer, Chandler Carruth 2015-09-21 2015-09   Library Evolution  
P0030R0 Proposal to Introduce a 3-Argument Overload to std::hypot Benson Ma 2015-09-08 2015-09   Library Evolution  
P0031R0 A Proposal to Add Constexpr Modifiers to reverse_iterator, move_iterator, array and Range Access Antony Polukhin 2015-09-09 2015-09   Library Evolution  
P0032R0 Homogeneous interface for variant, any and optional Vicente J. Botet Escriba 2015-09-24 2015-09   Library Evolution  
P0033R0 Re-enabling shared_from_this Jonathan Wakely, Peter Dimov 2015-09-23 2015-09   Library Evolution  
P0034R0 Civil Time for the Standard Library Bill Seymour 2015-09-25 2015-09   Library Evolution  
P0035R0 Dynamic memory allocation for over-aligned data Clark Nelson 2015-09-09 2015-09 N3396 Evolution  
P0036R0 Unary Folds and Empty Parameter Packs (Revision 1) Thibaut Le Jehan 2015-09-10 2015-09 N4358 Core  
P0037R0 Fixed point real numbers John McFarlane 2015-09-28 2015-09   Library Evolution, SG14  
P0038R0 Flat Containers Sean Middleditch 2015-09-25 2015-09   Library Evolution, SG14  
P0039R0 Extending raw_storage_iterator Brent Friedman 2015-09-11 2015-09   Library Evolution, SG14  
P0040R0 Extending memory management tools Brent Friedman 2015-09-11 2015-09   Library Evolution, SG14  
P0041R0 Unstable remove algorithms Brent Friedman 2015-09-11 2015-09   Library Evolution, SG14  
P0042R0 std::recover: undoing type erasure David Krauss 2015-09-27 2015-09   Library Evolution  
P0043R0 Function wrappers with allocators and noexcept David Krauss 2015-09-27 2015-09   Library Evolution  
P0044R0 unwinding_state: safe exception relativity David Krauss 2015-09-17 2015-09   Evolution  
P0045R0 Overloaded and qualified std::function David Krauss 2015-09-27 2015-09   Library Evolution  
P0046R0 Change is_transparent to metafunction Tomasz Kamiński 2015-09-10 2015-09   Library Evolution  
P0047R0 Transactional Memory (TM) Meeting Minutes 2015/06/01-2015/09/21 Michael Wong 2015-09-25 2015-09   Transactional Memory  
P0048R0 Games Dev/Low Latency/Financial Trading/Banking Meeting Minutes 2015/08/12-2015/09/23 Michael Wong 2015-09-25 2015-09   SG14  
P0050R0 C++ generic match function Vicente J. Botet Escriba 2015-09-24 2015-09   Library Evolution  
P0051R0 C++ generic overload function Vicente J. Botet Escriba 2015-09-22 2015-09   Library Evolution  
P0052R0 Generic Scope Guard and RAII Wrapper for the Standard Library Peter Sommerlad, Andrew L. Sandoval 2015-09-27 2015-09 N4189 Library  
P0053R0 C++ Synchronized Buffered Ostream Lawrence Crowl, Peter Sommerlad 2015-09-23 2015-09 N4187 Library  
P0054R0 Coroutines: reports from the fields Gor Nishanov 2015-09-12 2015-09   Evolution  
P0055R0 On Interactions Between Coroutines and Networking Library Gor Nishanov 2015-09-12 2015-09   Library Evolution  
P0056R0 Soft Keywords Gor Nishanov 2015-09-12 2015-09   Evolution  
P0057R0 Wording for Coroutines (Revision 3) Gor Nishanov 2015-09-26 2015-09 N4499 Core, Library Evolution  
P0058R0 An Interface for Abstracting Execution Jared Hoberock, Michael Garland, Olivier Girioux 2015-09-25 2015-09   Concurrency  
P0059R0 Add rings to the Standard Library Guy Davidson 2015-09-25 2015-09   SG14, Library Evolution  
P0060R0 Function Object-Based Overloading of Operator Dot Mathias Gaunard, Dietmar Kühl 2015-09-18 2015-09   Evolution  
P0061R0 Feature-testing preprocessor predicates for C++17 Clark Nelson 2015-09-16 2015-09   Feature Testing  
P0062R0 When should compilers optimize atomics? JF Bastien, Peter Dimov, Hal Finkel, Paul McKenney, Michael Wong, Jeffrey Yasskin 2015-09-25 2015-09   Concurrency  
P0063R0 C++17 should refer to C11 instead of C99 Hans Boehm 2015-09-25 2015-09   Concurrency  
P0065R0 Movable initializer lists, rev. 2 David Krauss 2015-09-27 2015-09 N4166 Evolution  
P0066R0 Accessors and views with lifetime extension David Krauss 2015-09-28 2015-09 N4221 Evolution  
P0067R0 Elementary string conversions Jens Maurer 2015-09-25 2015-09   Library  
P0068R0 Proposal of [[unused]], [[nodiscard]] and [[fallthrough]] attributes Andrew Tomazos 2015-09-03 2015-09   Evolution  
P0069R0 A C++ Compiler for Heterogeneous Computing Ben Sander, Greg Stoner, Siu-chi Chan, Wen-Heng (Jack) Chung 2015-09-28 2015-09   Concurrency  
P0070R0 Coroutines: Return Before Await Gor Nishanov 2015-09-12 2015-09   Evolution  
P0071R0 Coroutines: Keyword alternatives Gor Nishanov 2015-09-12 2015-09   Evolution  
P0072R0 Light-Weight Execution Agents Torvald Riegel 2015-09-24 2015-09 N4439 Concurrency  
P0073R0 On unifying the coroutines and resumable functions proposals Torvald Riegel 2015-09-25 2015-09   Evolution  
P0074R0 Making std::owner_less more flexible Jonathan Wakely 2015-09-23 2015-09   Library  
P0075R0 Template Library for Index-Based Loops Arch Robison, Pablo Halpern, Robert Geva, Clark Nelson 2015-09-25 2015-09   Library  
P0076R0 Vector and Wavefront Policies Arch Robison, Pablo Halpern, Robert Geva, Clark Nelson 2015-09-25 2015-09   Library  
P0077R0 is_callable, the missing INVOKE related trai Agustín Bergé 2015-09-22 2015-09 N4446 Library Evolution  
P0078R0 The [[pure]] attribute Karl-Étienne Perron 2015-09-25 2015-09 N3744 Evolution  
P0079R0 Extension methods in C++ Roger Orr 2015-09-28 2015-09   Evolution  
P0080R0 Variant: Discriminated Union with Value Semantics Michael Park 2015-07-28 2015-09   Library Evolution  
P0081R0 A proposal to add sincos to the standard library Paul Dreik 2015-09-25 2015-09   Numerics  
P0082R0 For Loop Exit Strategies (Revision 1) Alan Talbot 2015-09-24 2015-09 N3587 Evolution  
P0083R0 Splicing Maps and Sets (Revision 2) Alan Talbot 2015-09-24 2015-09 N3645 Library Evolution  
P0084R0 Emplace Return Type Alan Talbot 2015-09-24 2015-09   Library Evolution  
P0085R0 Oo... adding a coherent character sequence to begin octal-literals Michael Jonker, Axel Naumann 2015-05-08 2015-09   Evolution  
P0086R0 Variant design review Axel Naumann 2015-09-28 2015-09   Evolution  
P0087R0 Variant: a type-safe union without undefined behavior (v2) Axel Naumann 2015-09-28 2015-09 N4542 Library Evolution  
P0088R0 Variant: a type-safe union that is rarely invalid (v5) Axel Naumann 2015-09-27 2015-09 N4542 Library Evolution  
P0089R0 Quantifying Memory-Allocatiom Strategies John Lakos, Jeffrey Mendelsohn, Alisdair Meredith, Nathan Myers 2015-09-28 2015-09 N4468 Library Evolution  
P0090R0 Removing result_type, etc. Stephan T. Lavavej 2015-09-24 2015-09   Library Evolution  
P0091R0 Template parameter deduction for constructors (Rev. 3) Mike Spertus, Richard Smith 2015-09-24 2015-09 N4471 Evolution  
P0092R0 Polishing Howard Hinnant 2015-09-23 2015-09   Library Evolution  
P0093R0 Simply a strong variant David Sankel 2015-09-24 2015-09   Library Evolution  
P0094R0 Simply a basic variant David Sankel 2015-09-24 2015-09   Library Evolution  
P0095R0 The case for a language based variant David Sankel 2015-09-24 2015-09   Library Evolution  
P0096R0 Feature-testing recommendations for C++ Clark Nelson 2014-09-16 2015-09   Feature Testing  
P0097R0 Use Cases for Thread-Local Storage Paul E. McKenney, JF Bastien, Pablo Halpern, Michael Wong, Thomas Richard William Scogland, Robert Geva 2015-09-24 2015-09 N4376 Concurrency  
P0098R0 Towards Implementation and Use of memory order consume Paul E. McKenney, Torvald Riegel, Jeff Preshing, Hans Boehm, Clark Nelson, Olivier Giroux, Lawrence Crowl 2015-09-24 2015-09 N4321 Concurrency  
P0099R0 A low-level API for stackful context switching Oliver Kowalke, Nat Goodspeed 2015-09-27 2015-09 N4397 Concurrency  
P0100R0 Comparison in C++ Lawrence Crowl 2015-09-27 2015-09 N4367 Library Evolution  
P0101R0 An Outline of a C++ Numbers Technical Specification, Lawrence Crowl 2015-09-27 2015-09   Numerics  
P0102R0 C++ Parametric Number Type Aliases Lawrence Crowl 2015-09-27 2015-09   Numerics  
P0103R0 Overflow-Detecting and Double-Wide Arithmetic Operations Lawrence Crowl 2015-09-27 2015-09   Numerics  
P0104R0 Multi-Word Integer Operations and Types Lawrence Crowl 2015-09-27 2015-09   Numerics  
P0105R0 Rounding and Overflow in C++ Lawrence Crowl 2015-09-27 2015-09 N4448 Numerics  
P0106R0 C++ Binary Fixed-Point Arithmetic Lawrence Crowl 2015-09-27 2015-09 N3352 Numerics  
P0107R0 Better support for constexpr in std::array Louis Dionne 2015-09-23 2015-09   Library Evolution  
P0108R0 Skeleton Proposal for Thread-Local Storage (TLS) Paul E. McKenney, JF Bastien 2015-09-24 2015-09   Concurrency  
P0109R0 Function Aliases + Extended Inheritance = Opaque Typedefs Walter E. Brown 2015-09-25 2015-09 N3471 Evolution  
P0110R0 Implementing the strong guarantee for variant<> assignment Anthony Williams 2015-09-25 2015-09   Evolution, Library Evolution  
P0112R0 Networking Library (Revision 6) Christopher Kohlhoff 2015-09-25 2015-09   Library Evolution  
P0113R0 Executors and Asynchronous Operations, Revision 2 Christopher Kohlhoff 2015-09-25 2015-09 N4242 Concurrency  
P0114R0 Resumable Expressions (revision 1) Christopher Kohlhoff 2015-09-25 2015-09 N4453 Concurrency  
P0116R0 Boolean conversion for Standard Library types Robert Kawulak 2015-09-25 2015-09   Library Evolution  
P0117R0 Generic to_string/to_wstring functions Robert Kawulak 2015-09-25 2015-09   Library Evolution  
P0118R0 Concepts-TS editors report Andrew Sutton 2015-09-26 2015-09   Concepts  
P0119R0 Overload sets as function arguments Andrew Sutton 2015-09-25 2015-09   Evolution  
P0120R0 constexpr unions and common initial sequences Anthony Williams 2015-09-25 2015-09   Evolution  
P0121R0 Working Draft, C++ extensions for Concepts Andrew Sutton 2015-09-25 2015-09   Concepts  
P0122R0 array_view: bounds-safe views for sequences of objects Neil MacIntosh 2015-09-25 2015-09   Library Evolution  
P0123R0 Unifying the interfaces of string_view and array_view Neil MacIntosh 2015-09-25 2015-09   Library Evolution  
P0124R0 Linux-Kernel Memory Model Paul E. McKenney, Ulrich Weigand 2015-09-25 2015-09 N4444 Concurrency  
P0125R0 std::bitset inclusion test methods Vittorio Romeo 2015-09-25 2015-09   Library  
P0126R0 std::synchronic Olivier Giroux 2015-09-24 2015-09 N4195 Concurrency  
P0127R0 Declaring non-type template arguments with auto James Touton 2015-09-25 2015-09   Evolution  
P0128R0 constexpr_if Ville Voutilainen 2015-09-26 2015-09   Evolution  
P0129R0 We cannot (realistically) get rid of throwing moves Ville Voutilainen 2015-09-26 2015-09   Evolution  
P0130R0 Comparing virtual functions Scott Wardle, Roberto Parolin 2015-09-27 2015-09   SG14  
P0131R0 Unified call syntax concerns Bjarne Stroustrup 2015-09-27 2015-09   Evolution  
P0132R0 Non-throwing container operations Ville Voutilainen 2015-09-27 2015-09   Evolution, Library Evolution  
P0133R0 Non-throwing container operations Ville Voutilainen 2015-09-27 2015-09   Evolution, Library Evolution  
P0134R0 Introducing a name for brace-or-equal-initializers for non-static data members Richard Smith 2015-09-23 2015-09   Evolution  
P0135R0 Guaranteed copy elision through simplified value categories Richard Smith 2015-09-27 2015-09   Evolution  
P0136R0 Rewording inheriting constructors (core issue 1941 et al) Richard Smith 2015-09-25 2015-09 N4429 Core  
P0137R0 Core Issue 1776: Replacement of class objects containing reference members Richard Smith 2015-09-27 2015-09 N4430 Core