Standardization

N4487: Constexpr Lambda -- Faisal Vali, Ville Voutilainen, 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: N4487

Date: 2015-04-28

Constexpr Lambda

by Faisal Vali, Ville Voutilainen, Gabriel Dos Reis

Excerpt:

This proposal suggests allowing lambda-expressions in constant expressions, removing an existing restriction. The authors propose that certain lambda-expressions and operations on certain closure objects be allowed to appear within constant expressions. In doing so, we also propose that a closure type be considered a literal type if the type of each of its data-members is a literal type; and, that if the constexpr specifier is omitted within the lambda-declarator, that the generated function call operator be constexpr if it would satisfy the requirements of a constexpr function (similar to the constexpr inference that already occurs for implicitly defined constructors and the assignment operator functions).

Thoughts About C++17 -- Bjarne Stroustrup

We normally wait until committee papers get "N" (permanent) numbers, but this one is an exception. It has also already been circulated to ISO C++ committee members in preparation for the next ISO C++ meeting that begins on Monday in Lenexa, Kansas, USA.

D4492: Thoughts About C++17

by Bjarne Stroustrup

From the paper:

This is a draft intended to focus a discussion at the Lexena committee meeting.

This is an extended version (based on feedback) of an internal committee standard reflector message that got so widely distributed and discussed that it would be a good idea to have it as a document. I have tried to remove distracting committee jargon. Thanks to people who took part in the reflector discussion or commented on the web. I have also added links. It is still a collection of thoughts aimed at stimulating a discussion, rather than a formal paper or a precise proposal.

The note was written for committee members, but “escaped into the wild.” Here are a few comments from the web: [Reddit] [The Register] [Hacker News]

As you see, people outside the committee also have strong opinions. Those opinions can depart radically from the ones I hear in the committee and from reality.

I am often asked “what will C++17 be?” and variations of “What will C++17 do for me?” ... [continue reading]

N4402: Resumable Functions (revision 4) -- Gor Nishanov, Jim Radigan

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: N4402

Date: 2015-03-31

Resumable Functions (revision 4)

by Gor Nishanov, Jim Radigan

Excerpt:

Revisions and History

This document supersedes N4286. Changes relative to N4286 include:

  • renaming customization points back to resumable_traits and resumable_handle as they were in N4134;
  • changing requirements on the return type of initial_suspend() and final_suspend() to be lexically convertible to bool;
  • changing requirements on the return type of yield_value() to be either of a void type or a type lexically convertible to bool;
  • making a set_result member function optional in a promise type; the absence of a set_result indicates that resumable function does not support an eventual return value and using await operator or for-await statement is not allowed in resumable functions with such promise;
  • altered cancellation mechanism in resumable functions; instead of using cancellation_requested() member function in a promise to indicate that on the next resume resumable function need to be cancelled, an explicit member function destroy() is added to the resumable_handle. A destroy() member function can be invoked to force resumption of coroutine to go on the cancel path;
  • added resume(), destroy(), and done() member functions to resumable_handle;
  • moved proposed wording into a separate document N4302;
  • removed trivial awaitables suspend_always, suspend_never and suspend_if; switching yield_value, initial_suspend, and final_suspend to return bool eliminated the need for those;

Terms and Definitions

Coroutine

A generalized routine that in addition to traditional subroutine operations such as invoke and return supports suspend and resume operations.

...

2015-04 pre-Lenexa mailing available

The 2015-04 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
N4381 Suggested Design for Customization Points Eric Niebler 2015-03-11 2015-04   Library  
N4382 Working Draft, C++ extensions for Ranges Eric Niebler 2015-04-12 2015-04   Library  
N4383 C++ Standard Library Active Issues List (Revision R92) Marshall Clow 2015-04-10 2015-04   Library  
N4384 C++ Standard Library Defect Report List (Revision R92) Marshall Clow 2015-04-10 2015-04   Library  
N4385 C++ Standard Library Closed Issues List (Revision R92) Marshall Clow 2015-04-10 2015-04   Library  
N4386 Unspecialized std::tuple_size should be defined Nevin Liber 2015-02-24 2015-04   Library  
N4387 Improving pair and tuple, revision 3 Daniel Krügler, Geoffrey Romer, Ville Voutilainen 2015-03-14 2015-04 N4064 Library  
N4388 A Proposal to Add a Const-Propagating Wrapper to the Standard Library Jonathan Coe, Robert Mill 2015-02-25 2015-04 N4372 Library  
N4389 Wording for bool_constant, revision 1 Zhihao Yuan 2015-02-23 2015-04 N4334 Library  
N4390 Minimal incomplete type support for standard containers, revision 3 Zhihao Yuan 2015-02-24 2015-04 N4371 Library  
N4391 make_array, revision 4 Zhihao Yuan 2015-02-26 2015-04 N4315 Library  
N4392 C++ Latches and Barriers Alasdair Mackintosh, Olivier Giroux 2015-03-03 2015-04 N4204 Library  
N4393 Noop Constructors and Destructors Pablo Halpern 2015-04-10 2015-04   Evolution  
N4394 Agenda for Lenexa Meeting Clark Nelson 2015-03-12 2015-04      
N4395 SIMD Types: ABI Considerations Matthias Kretz 2015-04-10 2015-04   Concurrency/Library  
N4396 National Body Comments: PDTS 19841, Transactional Memory Barry Hedquist 2015-03-16 2015-04   Transactional Memory  
N4397 A low-level API for stackful coroutines Oliver Kowalke 2015-04-09 2015-04 N3985 Concurrency  
N4398 A unified syntax for stackless and stackful coroutines Oliver Kowalke 2015-04-09 2015-04   Concurrency  
N4399 Proposed Working Draft, Technical Specification for C++ Extensions for Concurrency Artur Laksberg 2015-04-10 2015-04 N4107 Concurrency  
N4400 Concurrency TS Editor's Report, May 2015 Artur Laksberg 2015-04-10 2015-04   Concurrency  
N4401 Defaulted comparison operator semantics should be uniform Michael Price 2015-04-07 2015-04   Evolution  
N4402 Resumable Functions (revision 4) Gor Nishanov   missing   Evolution  
N4403 Draft Wording for Resumable Functions Gor Nishanov   missing   Evolution  
N4404 Extension to aggregate initialization Oleg Smolsky 2015-03-31 2015-04   Evolution  
N4405 Type of the accumulaters of standard algorithms std::accumulate and std::inner_product Vladimir Grigoriev 2015-02-11 2015-04   Library Evolution  
N4406 Integrating Executors with Parallel Algorithm Execution Jared Hoberock, Michael Garland, Oliver Giroux 2015-04-10 2015-04   Concurrency  
N4407 Working Draft, Technical Specification for C++ Extensions for Parallelism Jared Hoberock 2015-04-10 2015-04   Concurrency  
N4408 Parallelism TS Editor's Report Jared Hoberock 2015-04-10 2015-04   Concurrency  
N4409 Programming Languages -- Technical Specification for C++ Extensions for Parallelism Jared Hoberock 2015-04-10 2015-04   Concurrency  
N4410 Responses to PDTS comments on Transactional Memory Jens Maurer 2015-04-09 2015-04   Transactional Memory  
N4411 Task Block (formerly Task Region) R4 Pablo Halpern, Arch Robison, Hong Hong, Artur Laksberg, Gor Nishanov, Herb Sutter 2015-04-10 2015-04   Library Evolution, Concurrency  
N4412 Shortcomings of iostreams Jens Maurer 2015-04-09 2015-04   Library  
N4413 Constexpr Lambas Faisal Vali   missing   Evolution  
N4414 Executors and Schedulers Revision 5 Chris Mysen 2015-04-10 2015-04 N4143 Concurrency  
N4415 Simple Contracts for C++ Gabriel Dos Reis, J. Daniel Garcia, Francesco Logozzo, Manuel Fahndrich, Shuvendu Lahri 2015-04-12 2015-04   Evolution  
N4416 Don't Move: Vector Can Have Your Non-Moveable Types Covered Nevin Liber 2015-04-09 2015-04   Library Evolution  
N4417 Source-Code Information Capture Robert Douglas 2015-04-08 2015-04 N4129 Reflection  
N4418 Parameter Stringization Robert Douglas 2015-04-08 2015-04   Reflection  
N4419 Potential extensions to Source-Code Information Capture Robert Douglas 2015-04-08 2015-04   Reflection  
N4420 Defining Test Code Robert Douglas 2015-04-08 2015-04   Reflection  
N4421 Evolution Active Issues List (Revision R11) Ville Voutilainen 2015-04-10 2015-04      
N4422 Evolution Completed Issues List (Revision R11) Ville Voutilainen 2015-04-10 2015-04      
N4423 Evolution Closed Issues List (Revision R11) Ville Voutilainen 2015-04-10 2015-04      
N4424 Inline Variables Hal Finkel, Richard Smith 2015-04-07 2015-04   Evolution  
N4425 Generalized Dynamic Assumptions Hal Finkel 2015-04-07 2015-04   Evolution  
N4426 Adding [nothrow-] swappable traits Daniel Krügler 2015-04-10 2015-04   Library  
N4427 Agenda and Meeting Notice for WG21 Pre-Lenexa Telecon Meeting Herb Sutter 2015-04-08 2015-04      
N4428 Type Property Queries (rev 4) Andrew Tomazos, Christian Kaeser 2015-04-08 2015-04 N4113 Reflection  
N4429 Core issue 1941 - rewording inherited constructors Richard Smith 2015-04-10 2015-04   Evolution  
N4430 Core issue 1776 - replacement of class objects containing reference members Richard Smith 2015-04-10 2015-04 N4303 Core  
N4431 Working Draft, Standard for Programming Language C++ Richard Smith 2015-04-10 2015-04 N4296    
N4432 Editor's Report -- Working Draft, Standard for Programming Language C++ Richard Smith 2015-04-10 2015-04      
N4433 Flexible static_assert messages Michael Price 2015-04-09 2015-04   Evolution  
N4434 Tweaks to Streamline Concepts Lite Syntax Walter Brown 2015-04-10 2015-04   Evolution  
N4435 Proposing Contract Attributes Walter Brown 2015-04-09 2015-04   Evolution  
N4436 Proposing Standard Library Support for the C++ Detection Idiom Walter Brown 2015-04-09 2015-04   Library Evolution  
N4437 Conditionally-supported Special Math Functions, v3 Walter Brown 2015-04-09 2015-04 N3743 Library Evolution  
N4438 Industrial Experience with Transactional Memory at Wyatt Technologies. Brett Hall 2015-04-09 2015-04   Transactional Memory  
N4439 Light-Weight Execution Agents Revision 3 Torvald Riegel 2015-04-10 2015-04 N4156 Concurrency  
N4440 Feature-testing recommendations for C++ Clark Nelson 2014-04-10 2015-04 N4200 Feature Testing  
N4441 SG5: Transactional Memory (TM) Meeting Minutes 2015-03-23 and 2015-04-06 Michael Wong 2015-04-10 2015-04   Transactional Memory  
N4442 Default argument for second parameter of std::advance (Rev. 1) Vladimir Grigoriev 2015-04-09 2015-04 N4369 Library Evolution  
N4443 Introducing alias size_type for type size_t in class std::bitset (Rev. 1 ) Vladimir Grigoriev 2015-04-09 2015-04 N4368 Library Evolution  
N4444 Linux-Kernel Memory Model Paul E. McKenney 2015-04-10 2015-04 N4374 Concurrency  
N4445 Overly attached promise Agustín Bergé, Hartmut Kaiser 2015-04-09 2015-04   Concurrency  
N4446 The missing INVOKE related trait Agustín Bergé 2015-04-09 2015-04   Library Evolution  
N4447 From a type T, gather members name and type information, via variadic template expansion Cleiton Santoia Silva, Daniel Auresco 2015-04-10 2015-04 N3987 Reflection  
N4448 Rounding and Overflow in C++ Lawrence Crowl 2015-04-12 2015-04   Library Evolution  
N4449 Message Digest Library for C++ Zhihao Yuan 2015-04-09 2015-04   Library Evolution  
N4450 Variant: a typesafe union (v2) Axel Naumann 2015-04-13 2015-04 N4218 Library Evolution  
N4451 Static reflection Matúš Chochlík 2014-04-11 2015-04 N4111 Reflection  
N4452 Use cases of reflection Matúš Chochlík 2014-04-11 2015-04   Reflection  
N4453 Resumable Expressions Christopher Kohlhoff 2015-04-12 2015-04   Evolution  
N4454 SIMD Types Example: Matrix Multiplication Matthias Kretz 2015-04-10 2015-04   Concurrency  
N4455 No Sane Compiler Would Optimize Atomics JF Bastien 2015-04-10 2015-04   Concurrency  
N4456 Towards improved support for games, graphics, real-time, low latency, embedded systems Michael Wong 2015-04-12 2015-04   Evolution  
N4457 C++ Standard Core Language Active Issues, Revision 93 William M. Miller 2015-04-13 2015-04      
N4458 C++ Standard Core Language Defect Reports and Accepted Issues, Revision 93 William M. Miller 2015-04-13 2015-04      
N4459 C++ Standard Core Language Closed Issues, Revision 93 William M. Miller 2015-04-13 2015-04      
N4460 LWG 2424: Atomics, mutexes and condition variables should not be trivially copyable Ville Voutilainen 2015-04-07 2015-04   Evolution  
N4461 Static if resurrected Ville Voutilainen 2015-04-07 2015-04   Evolution  
N4462 LWG 2089, Towards more perfect forwarding Ville Voutilainen 2015-04-07 2015-04   Evolution  
N4463 IO device requirements for C++ Cleiton Santoia Silva, Daniel Auresco 2015-04-10 2015-04   I/O  
N4464 Pi-calculus syntax for C++ executors Cleiton Santoia Silva 2015-04-10 2015-04   Concurrency  
N4465 A Module System for C++ (Revision 3) Gabriel Dos Reis, Mark Hall, Gor Nishanov 2015-04-13 2015-04   Evolution  
N4466 Wording for Modules Gabriel Dos Reis 2015-04-13 2015-04   Evolution  
N4467 C++ Modules: Directions and Issues Gabriel Dos Reis   missing   Evolution  
N4468 On Quantifying Memory-Allocation Strategies John Lakos, Jeffrey Mendelsohn, Alisdair Meredith, Nathan Myers 2015-04-11 2015-04   Library Evolution  
N4469 Template Argument Type Deduction James Touton, Mike Spertus 2015-04-10 2015-04 N3601 Evolution  
N4470 Variadic lock_guard Mike Spertus 2015-04-10 2015-04   Concurrency  
N4471 Template parameter deduction for constructors (Rev 2) Mike Spertus 2015-04-12 2015-04 N3602 Evolution  
N4472 consexpr goto Ville Voutilainen 2015-04-10 2015-04   Evolution  
N4473 noexcept(auto), again Ville Voutilainen 2015-04-10 2015-04   Evolution  
N4474 Unified Call Syntax: x.f(y) and f(x,y) Bjarne Stroustrup, Herb Sutter 2015-04-12 2015-04   Evolution  
N4475 Default comparisons (R2) Bjarne Stroustrup 2015-04-09 2015-04 N4175 Evolution  
N4476 Thoughts about Comparisons (R2) Bjarne Stroustrup 2015-04-09 2015-04   Evolution  
N4477 Operator Dot (R2) Bjarne Stroustrup, Gabriel Dos Reis 2015-04-09 2015-04 N4173 Evolution  
N4478 Networking Library Proposal (Revision 5 Christopher Kohlhoff 2015-04-13 2015-04 N4370 Library Evoution  
N4479 Merge Fundamentals V1 into v2 Jeffrey Yasskin 2015-04-12 2015-04   Library Evoution  
N4480 Programming Languages -- C++ Extensions for Library Fundamentals DTS Jeffrey Yasskin 2015-04-07 2015-04      
N4481 Working Draft, C++ Extensions for Library Fundamentals, Version 2 Jeffrey Yasskin 2015-04-12 2015-04 N4336 Library Evolution  
N4482 Some notes on executors and the Networking Library Proposal Christopher Kohlhoff 2015-04-13 2015-04   Concurrency  

N4394: PL22.16/WG21 draft agenda: 4-9 May 2015, Lenexa KS/US -- Clark Nelson

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: N4394

Date: 2015-03-12

PL22.16/WG21 draft agenda: 4-9 May 2015, Lenexa KS/US

by Clark Nelson

Excerpt:

At this meeting we will address ballot comments on the Transactional Memory PDTS (N4302), and discuss whatever comments are available on the Concepts PDTS (N4377). We also aim to bring several projects to their next ballot stage, potentially including the following:

  • Library Fundamentals 2 (prospective WD N4336)
  • Concurrency (proposal N4313)
  • Networking (proposal N4370)

N4388: A Proposal to Add a Const-Propagating Wrapper to the Standard Library -- J Coe, R Mill

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: N4388

Date: 2015-02-25

A Proposal to Add a Const-Propagating Wrapper to the Standard Library

by Jonathan Coe, Robert Mill

Excerpt:

We propose the introduction of a propagate_const wrapper class that propagates const-ness to pointer-like member variables. ... The behaviour of const member functions on objects with pointer-like data members is seen to be surprising by many experienced C++ developers. A const member function can call non-const functions on pointer-like data members and will do so by default without use of const_cast...

C++17 Library Papers for Cologne - Part II

The second and last part in my miniseries about the library papers for next weeks LWG Meeting:

C++17 Library Papers for Cologne - Part II

by Jens WEller

From the article:

This is the second part about the papers for the Library Working Group Meeting in Cologne next week. The last part already covered some interesting papers, and gives an impression on what will be included into the Standard Library for C++17...

2015-02 mid-meeting mailing available

The 2015-02 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
N4340 Remove Deprecated Use of the register Keyword Alisdair Meredith 2014-11-26 2015-02   Evolution  
N4341 C++ Standard Library Active Issues List (Revision R92) Alisdair Meredith   missing   Library  
N4342 C++ Standard Library Defect Report List (Revision R92) Alisdair Meredith   missing   Library  
N4343 C++ Standard Library Closed Issues List (Revision R92) Alisdair Meredith   missing   Library  
N4344 Suggested Design for Customization Points Eric Niebler   missing   Library  
N4345 Ranges for the Standard Library, Revision 2 Eric Niebler   missing   Library  
N4346 Multidimensional bounds, index and array_view, revision 5 Lukasz Mendakiewicz 2015-01-05 2015-02 N4177 Library  
N4347 Responses to National Body Comments, PDTS 19568, Library Fundamentals Barry Hedquist   missing      
N4348 Making std::function thread-safe Geoffrey Romer 2015-02-02 2015-02 N4159 Library  
N4349 Minutes of WG21 Telecon Jonathan Wakely 2014-12-05 2015-02      
N4350 Agenda and Meeting Notice for WG21 Concepts Meeting Notice (revision 1) Herb Sutter 2015-01-15 2015-02 N4339    
N4351 Responses to National Body Comments, PDTS 19570, C++ Extensions for Parallelism Barry Hedquist 2014-12-23 2015-02      
N4352 Parallelism TS Jared Hoberock 2015-01-08 2015-02 N4310    
N4353 Parallelism TS - Editor's Report Jared Hoberock 2015-01-08 2015-02      
N4354 Parallelism TS - DTS Ballot Document Jared Hoberock 2015-01-08 2015-02      
N4355 Shared Multidimensional Arrays with Polymorphic Layout Carter Edwards 2015-02-04 2015-02   Library  
N4356 Relaxed Array Type Declarator Carter Edwards 2015-02-04 2015-02   Evolution  
N4357 Introduce the [[noexit]] attribute for main as a hint to eliminate destructor calls for objects with static storage duration Jens Maurer 2015-01-19 2015-02 N4226 Evolution  
N4358 Unary Folds and Empty Parameter Packs Thibaut Le Jehan 2015-01-20 2015-02   Evolution  
N4359 A Proposal to Add vector release method just like unique_ptr release method to the Standard Library Jerry Liang 2015-01-09 2015-02   Library  
N4360 Delayed Evaluation Parameters Douglas Boffey 2015-01-22 2015-02   Evolution  
N4361 Concepts Lite TS Andrew Sutton 2015-01-27 2015-02 N4333    
N4362 WG21 2015-01 Skillman Minutes John Spicer 2015-01-27 2015-02      
N4363 Library Fundamentals v1 DTS Jeffrey Yasskin   missing      
N4364 Editor's Report for the Library Fundamentals v1 DTS Jeffrey Yasskin   missing      
N4365 Responses to National Body Comments, ISO/IEC PDTS 19568, C++ Extensions for Library Fundamentals Barry Hedquist 2015-01-29 2015-02      
N4366 LWG 2228: Missing SFINAE rule in unique_ptr templated assignment Howard Hinnant 2015-01-11 2015-02   Library  
N4367 Comparison in C++ Lawrence Crowl 2015-02-08 2015-02   Evolution  
N4368 Introducing alias size_type for type size_t in class std::bitset Vladimir Grigoriev 2015-02-03 2015-02   Library evolution  
N4369 Default argument for second parameter of std::advance Vladimir Grigoriev 2015-01-12 2015-02   Library evolution  
N4370 Networking Library Proposal (Revision 4) Christopher Kohlhoff 2015-02-06 2015-02 N4332 Library  
N4371 Minimal incomplete type support for standard containers, revision 2 Zhihao Yuan 2015-02-04 2015-02 N4056 Library  
N4372 A Proposal to Add a Const-Propagating Wrapper to the Standard Library Jonathan Coe 2015-02-06 2015-02 N4209 Library  
N4373 Atomic View Carter Edwards, Hans Boehm 2015-01-26 2015-02 N4142 Library  
N4374 Linux-Kernel Memory Mode Paul E. McKenney 2015-02-06 2015-02 N4322 Concurrency  
N4375 Out-of-Thin-Air Execution is Vacuous Paul E. McKenney 2015-02-06 2015-02 N4323 Concurrency  
N4376 Use Cases for Thread-Local Storage Paul E. McKenney 2015-02-06 2015-02 N4324 Concurrency  
N4377 C++ Extensions for Concepts PDTS Andrew Sutton 2015-02-09 2015-02      
N4378 Language Support for Contract Assertions John Lakos, Nathan Myers, Alexei Zakharov, Alexander Beels 2015-02-08 2015-02   Evolution  
N4379 FAQ about N4378, Language Support for Contract Assertions John Lakos, Nathan Myers 2015-02-08 2015-02   Evolution  
N4380 Constant View: A proposal for a std::as_const helper function template ADAM David Alan Martin, Alisdair Meredith 2015-02-05 2015-02   Library