Standardization

New paper: N3631, C11: The New C Standard -- Tom Plum

Note: Both this paper by Tom Plum and the other just posted by Bjarne Stroustrup refer to prior published articles about C and C++ compatibility. The reason for drawing attention to that information is that C and C++ compatibility is now expected to be discussed at next week's ISO C++ meeting in Bristol. For an example why this discussion is taking place now, see paper N3557 section 7, which raises the question of compatibility between C and C++ for parallelism, including that pressure from C choices affects our design choices for C++ as well.

However, the C++ committee's focus at Bristol is still on working toward a Committee Draft ballot for C++14. This C/C++ compatibility discussion is expected to take place late in the meeting when the technical work for C++ in general and C++14 in particular is complete.

 

A new WG21 paper is available. A copy is linked below, and the paper will also appear in the next normal WG21 mailing. If you are not a committee member, please use the comments section below or the std-proposals forum for public discussion.

Document number: N3631

Date: 2013-04-09

C11: The New C Standard

by Tom Plum

Excerpt, including explaining why the above title is not a link:

This material was originally published in a series of articles in Dr. Dobb’s (www.drdobbs.com) and is reprinted here, with permission, for use by C++ committee members. Outside the committee, please refer to readers to the following links, rather than distributing this document. (Copyright 2012 Dr. Dobb’s)

http://www.drdobbs.com/cpp/232800444 (C11 overview, concurrency, etc.)

http://www.drdobbs.com/cpp/232901670 (C11 security, Annex K, Annex L)

http://www.drdobbs.com/cpp/240001401 (Alignment, Unicode, ease‐of‐use features, C++ compatibility)

New paper: N3628, C and C++ Compatibility -- Bjarne Stroustrup

A new WG21 paper is available. A copy is linked below, and the paper will also appear in the next normal WG21 mailing. If you are not a committee member, please use the comments section below or the std-proposals forum for public discussion.

Document number: N3628

Date: 2013-04-08

C and C++ Compatibility

by Bjarne Stroustrup

Excerpt:

It seems that a serious discussion about C/C++ compatibility is starting. “By popular demand,” here is a paper in three parts that I wrote just over 10 years ago. Much have changed since that, so please don’t expect the paper to be completely up-to-date or to completely reflect my current views. However, I don’t have the time to write a 2013 version of these 2002 papers, and I don’t change my fundamental opinions all that often. I think that C/C++ compatibility is very important and valuable for both the C and C++ communities.

  • C and C++: Siblings. The C/C++ Users Journal. July 2002.
  • C and C++: A Case for Compatibility. The C/C++ Users Journal. August 2002.
  • C and C++: Case Studies in Compatibility. The C/C++ Users Journal. September 2002.

A Look at C++14 and Beyond: Papers Part 3 -- Meeting C++

And part 3:

A look at C++14 and beyond: Papers Part 3

This is the 3rd part of my little series over the papers in the Pre-Bristol mailing. I have added "and beyond" to the title, as I decided to handle all papers with Part 2, and now will continue to do so. This edition will again feature a few highlights, and a lot of proposals from different areas of C++.

Also, please understand, that all of the papers here are proposals. None of them are voted into any standard yet, maybe Bristol will give us a hint about what to expect for C++14, maybe not. Still, the proposals will give an impression, on what C++14 could be like.

A Look at C++14: Papers Part 2 -- Meeting C++

A few days ago, we linked to Part 1. As noted there, although the article is labeled “A look at C++14,” not all of these papers are for C++14, and regardless of timeframe not all will be adopted. But it is a useful look at what’s on the commitee’s radar.

Part 2 has just been posted:

A look at C++14: Papers Part 2

This is the second part of my C++ Standardization Papers series. The first part has been received quite well, with more then 5k views in the first two days. Also isocpp.org, Phoronix, lwn.net, a lot of russian blogs and others have linked to it. There also was a nice discussion on reddit. Again, like in Part 1, I want to emphasize, that I only cover part of all papers in this blog post. Also not all of these papers are meant to be happening with C++14, modules & concepts for example are not going to be part of C++14 (at least this is highly unlikely). Still, I will cover those papers too, as some of them will be discussed in Bristol for sure. All papers can be found here.

Some words on C++14. C++14 is not going to be like C++11 changing the language a lot. Its more meant to enhance the language with libraries, and improve or provide bug fixes for C++11. That's why you could call C++14 a minor Standard, and the next major C++ Standard is C++17, at least you could see this as the current plan and road map for C++. But lets have a look at the papers: ...

 

A Look at C++14: Papers Part I -- Meeting C++

[Ed. Note: Although labeled "A look at C++14," not all of these papers are for C++14, and regardless of timeframe not all will be adopted. But it is a useful look at what's on the commitee's radar.]

As we gear up for the Bristol meeting that starts on April 15, the committee members now are busily reading and preparing positions on the many papers to be considered at the meeting.

Since our last meeting in Portland, we have a recent-record-level 160 technical papers, most of which are proposals that will need to be considered and discussed at the face-to-face meeting.

Those papers have been posted here; see the blog's Standardization category. Most recently, the papers have been posted individually with crafted excerpts, and many committee members have found that useful and already follow the mailings primarily here on the blog like everyone else.

However, it's not just the committee members who are interested in these proposals. The Meeting C++ blog has posted the first of a multi-part series of "digest" summaries of the papers in the March mailing (they skipped the January mailing). In this first installment, they summarize a first batch of papers...

A look at C++14: Papers Part I

This is the first Part of n, or lets say many entries in this blog. In total I hope to be able to cover most papers in 3-4 blog posts, giving the reader an overview over the suggestions and changes for C++ at the coming C++ Committee Meeting in April. In total there are 98 Papers, so I will skip some, but try to get as much covered as possible. I'll skip papers with Meeting Minutes for sure, and try to focus on those focusing on C++11 or C++14 features. As the papers are ordered by there Number (N3522 being the first), I'll go top down, so every blog post will contain different papers from different fields of C++ Standardization. As N352-24 are Reports about Active Issues, Defects and Closed Issues I'll skip them for now, also I will not read through Meeting Minutes and such.

Quick Q: So what's "lite" about "concepts lite" vs. full concepts?

There's a Q&A on StackOverflow, but see also the discussion about this in the March 12 Concepts conference call minutes that were posted here on the same day as the call. It's really more than minutes, it's also a record of discussion that answers this and other questions.

From SO:

What are the differences between concepts and template constraints?

I want to know what are the semantic differences between the C++ full concepts proposal and template constraints (for instance, constraints as appeared in Dlang or the new concepts-lite proposal for C++1y).

What are full-fledged concepts capable of doing than template constraints cannot do?

Pre-Bristol standards papers mailing available

The official pre-meeting standards papers mailing is now available. It includes the spring meeting agenda, updated issues lists, and a number of new papers including at least one that came through the public std-proposals forum. (Update: Please also direct discussion about these papers to that forum.)

Note: Most or all of these papers have also been posted already to this site's Standardization RSS feed.

 

WG21 Number Title Author Document Date Mailing Date Previous Version Subgroup Disposition
SD-1 2013 PL22.16/WG21 document list Clark Nelson 2013-03-18 2013-03      
SD-2 ISO WG21 and INCITS PL22.16 membership list Clark Nelson 2013-03-18 2013-03      
SD-3 SC22/WG21 (C++) Study Group Organizational Information Herb Sutter 2012-10-04 2012-09      
SD-5 WG21 and PL22.16 (C++) Joint Mailing and Meeting Information Herb Sutter 2010-09-20 2012-09      
N3522 C++ Standard Library Active Issues List (Revision R82) Alisdair Meredith 2013-03-18 2013-03 N3516 Library  
N3523 C++ Standard Library Defect Report List (Revision R82) Alisdair Meredith 2013-03-18 2013-03 N3517 Library  
N3524 C++ Standard Library Closed Issues List (Revision R82) Alisdair Meredith 2013-03-18 2013-03 N3518 Library  
N3525 Polymorphic Allocators Pablo Halpern 2013-03-18 2013-03   Library Evolution  
N3526 Uniform initialization for arrays and class aggregate types Michael Price 2013-01-21 2013-03   Evolution  
N3527 A proposal to add a utility class to represent optional objects (Revision 2) F. Cacciola, A. Krzemieński 2013-03-10 2013-03 N3406 Library Evolution  
N3528 Minutes of Feb 5 2013 SG1 Phone Call Pablo Halpern 2013-02-05 2013-03      
N3529 SG5: Transactional Memory (TM) Meeting Minutes 2012/10/30-2013/02/04 Michael Wong 2013-02-14 2013-03      
N3530 Leveraging OpenMP infrastructure for language level parallelisation D. Gove, N. Copty, M. Wong 2013-03-15 2013-03   Concurrency  
N3531 User-defined Literals for Standard Library Types (version 3) Peter Sommerlad 2013-03-08 2013-03 N3468 Library Evolution  
N3532 C++ Dynamic Arrays L. Crowl, M. Austern 2013-03-12 2013-03 N2648 Library Evolution  
N3533 C++ Concurrent Queues L. Crowl, C. Mysen 2013-03-12 2013-03 N3434 Concurrency  
N3534 C++ Pipelines A. Mackintosh, A. Berkan 2013-03-15 2013-03   Concurrency  
N3535 C++ Stream Mutexes Lawrence Crowl 2013-03-06 2013-03 N3395 Concurrency  
N3536 C++ Sized Deallocation Lawrence Crowl 2013-03-05 2013-03 N3432 Core  
N3537 Clarifying Memory Allocation L. Crowl, C. Carruth 2013-03-12 2013-03 N3433 Core  
N3538 Pass by Const Reference or Value Lawrence Crowl 2013-03-06 2013-03 N3445 Evolution  
N3539 C++ Standard Core Language Active Issues, Revision 83 William M. Miller 2013-03-18 2013-03 N3501 Core  
N3540 C++ Standard Core Language Defect Reports and Accepted Issues, Revision 83 William M. Miller 2013-03-18 2013-03 N3502 Core  
N3541 C++ Standard Core Language Closed Issues, Revision 83 William M. Miller 2013-03-18 2013-03 N3503 Core  
N3542 Proposal for Unbounded-Precision Integer Types Pete Becker 2013-03-18 2013-03 N3417 Numerics  
N3543 Priority Queue, Queue and Stack: Changes and Additions G. Powell, T. Blechmann 2013-03-15 2013-03 N3479 Library Evolution  
N3544 SG5: Transactional Memory (TM) Meeting Minutes 2013/02/25-2013/03/04 Michael Wong 2013-03-06 2013-03      
N3545 An Incremental Improvement to integral_constant Walter E. Brown 2013-03-12 2013-03   Library Evolution  
N3546 TransformationTraits Redux Walter E. Brown 2013-03-12 2013-03   Library Evolution  
N3547 Three <random>-related Proposals Walter E. Brown 2013-03-12 2013-03   Library Evolution  
N3548 Conditionally-supported Special Math Functions for C++14 Walter E. Brown 2013-03-12 2013-03   Library Evolution  
N3549 s/bound/extent/ Walter E. Brown 2013-03-12 2013-03   Core  
N3550 Proposed C++14 Value Classification Walter E. Brown 2013-03-12 2013-03   Core  
N3551 Random Number Generation in C++11 Walter E. Brown 2013-03-12 2013-03      
N3552 Introducing Object Aliases Walter E. Brown 2013-03-12 2013-03   Evolution  
N3553 Proposing a C++1Y Swap Operator Walter E. Brown 2013-03-12 2013-03   Evolution  
N3554 A Parallel Algorithms Library J. Hoberock, O. Giroux, V. Grover, H. Sutter, et al. 2013-03-15 2013-03   Concurrency  
N3555 A URI Library for C++ G. Matthews, D. Berris  
N3507 Networking  
N3556 Thread-Local Storage in X-Parallel Computations P. Halpern, C. Leiserson 2013-03-18 2013-03   Concurrency  
N3557 Considering a Fork-Join Parallelism Library Pablo Halpern 2013-03-18 2013-03   Concurrency  
N3558 A Standardized Representation of Asynchronous Operations N. Gustafsson, A. Laksberg, H. Sutter, S. Mithani 2013-03-15 2013-03 N3428 Concurrency  
N3559 Proposal for Generic (Polymorphic) Lambda Expressions F. Vali, H. Sutter, D. Abrahams 2013-03-17 2013-03 N3418 Evolution  
N3560 Proposal for Assorted Extensions to Lambda Expressions F. Vali, H. Sutter, D. Abrahams 2013-03-17 2013-03   Evolution  
N3561 Semantics of Vector Loops R. Geva, C. Nelson 2013-03-15 2013-03   Concurrency  
N3562 Executors and schedulers, revision 1 M. Austern, L. Crowl, C. Carruth, N. Gustaffson, et al. 2013-03-15 2013-03 N3378 Concurrency  
N3563 C++ Mapreduce C. Mysen, L. Crowl, A. Berkan 2013-03-15 2013-03 N3446 Concurrency  
N3564 Resumable Functions N. Gustafsson, D. Brewis, H. Sutter, S. Mithani 2013-03-15 2013-03 N3328 Concurrency  
N3565 IP Address Design Constraints Aleksandar Fabijanic 2013-03-15 2013-03   Networking  
N3566 Evolution Open Issues Ville Voutilainen 2013-03-12 2013-03   Evolution  
N3567 Evolution Closed Issues Ville Voutilainen 2013-03-12 2013-03   Evolution  
N3568 Shared locking in C++ Howard Hinnant 2013-03-11 2013-03 N3427 Concurrency  
N3569 SPRING 2014 JTC1/SC22/WG21 C++ STANDARDS COMMITTEE MEETING: Preliminary Information Peter Sommerlad 2013-03-15 2013-03      
N3570 Quoted Strings Library Proposal (Revision 1) Beman Dawes 2013-03-14 2013-03 N3431 Library Evolution  
N3571 A Proposal to add Single Instruction Multiple Data Computation to the Standard Library P. Estérie, M. Gaunard, J. Falcou 2013-03-15 2013-03   Concurrency  
N3572 Unicode Support in the Standard Library Mark Boyall 2013-03-10 2013-03   Library Evolution  
N3573 Heterogenous extensions to unordered containers Mark Boyall 2013-03-10 2013-03   Library Evolution  
N3574 Binding stateful functions as function pointers Mark Boyall 2013-03-10 2013-03   Library Evolution  
N3575 Additional Standard allocation schemes Mark Boyall 2013-03-10 2013-03   Library Evolution  
N3576 SG8 Concepts Teleconference Minutes - 2013-03-12 Herb Sutter 2013-03-12 2013-03      
N3577 Fall 2013 JTC1/SC22/WG21 C++ Standards Committee Meeting Nevin Liber 2013-03-14 2013-03      
N3578 Proposing the Rule of Five Walter E. Brown 2013-03-12 2013-03   Evolution  
N3579 A type trait for signatures Mike Spertus 2013-03-15 2013-03 N3466 Library Evolution  
N3580 Concepts Lite: Constraining Templates with Predicates A. Sutton, B. Stroustrup, G. Dos Reis 2013-03-17 2013-03   Concepts  
N3581 Delimited iterators Mike Spertus 2013-03-16 2013-03   Library Evolution  
N3582 Return type deduction for normal functions Jason Merrill 2013-03-15 2013-03 N3386 Core  
N3583 Exploring constexpr at Runtime Scott Schurr 2013-03-13 2013-03   Evolution  
N3584 Wording for Accessing Tuple Fields by Type Mike Spertus 2013-03-14 2013-03   Library  
N3585 Iterator-Related Improvements to Containers (Revision 2) Alan Talbot 2013-03-17 2013-03 N3450 Library  
N3586 Splicing Maps and Sets A. Talbot, H. Hinnant 2013-03-17 2013-03   Library  
N3587 For Loop Exit Strategies Alan Talbot 2013-03-17 2013-03   Evolution  
N3588 make_unique Stephan T. Lavavej 2013-03-15 2013-03   Library Evolution  
N3589 Summary of Progress Since Portland towards Transactional Language Constructs for C++ H. Boehm, J. Gottschlich, V. Luchangco, M. Wong, et al. 2013-03-15 2013-03      
N3591 Summary of Discussions on Explicit Cancellation in Transactional Language Constructs for C++ H. Boehm, J. Gottschlich, M. Moir, M. Wong, et al. 2013-03-15 2013-03   Evolution  
N3592 Alternative cancellation and data escape mechanisms for transactions Torvald Riegel 2013-03-15 2013-03   Evolution  
N3593 std::split(): An algorithm for splitting strings Greg Miller 2013-03-13 2013-03 N3510 Library Evolution  
N3594 std::join(): An algorithm for joining a range of elements Greg Miller 2013-03-13 2013-03   Library Evolution  
N3595 Simplifying Argument-Dependent Lookup Rules Peter Gottschling 2013-03-15 2013-03   Evolution  
N3596 Code Reuse in Class Template Specialization Peter Gottschling 2013-03-15 2013-03   Evolution  
N3597 Relaxing constraints on constexpr functions Richard Smith 2013-03-15 2013-03 N3444 Evolution  
N3598 constexpr member functions and implicit const Richard Smith 2013-03-12 2013-03   Evolution  
N3599 Literal operator templates for strings Richard Smith 2013-03-13 2013-03   Evolution  
N3600 C++ Latches and Barriers Alasdair Mackintosh 2013-03-16 2013-03   Concurrency  
N3601 Implicit template parameters M. Spertus, D. Vandevoorde 2013-03-17 2013-03 N3405 Evolution  
N3602 Template parameter deduction for constructors M. Spertus, D. Vandevoorde 2013-03-14 2013-03 N3405 Evolution  
N3603 A Three-Class IP Address Proposal Christopher Kohlhoff 2013-03-17 2013-03   Networking  
N3604 Centralized Defensive-Programming Support for Narrow Contracts J. Lakos, A. Zakharov 2013-03-18 2013-03   Library Evolution  
N3605 Member initializers and aggregates Ville Voutilainen 2013-03-15 2013-03   Evolution  
N3606 Extending std::search to use Additional Searching Algorithms Marshall Clow 2013-03-17 2013-03 N3411 Library  
N3607 Making non-modifying sequence operations more robust M. Spertus, A. Pall 2013-03-15 2013-03   Library Evolution  
N3608 exchange() utility function, revision 2 Jeffrey Yasskin 2013-03-15 2013-03 N3511 Library Evolution  
N3609 string_view: a non-owning reference to a string, revision 3 Jeffrey Yasskin 2013-03-15 2013-03 N3512 Library Evolution  
N3610 Generic lambda-capture initializers, supporting capture-by-move Ville Voutilainen 2013-03-15 2013-03   Evolution  
N3611 A Rational Number Library for C++ Bill Seymour 2013-03-15 2013-03 N3489 Numerics  
N3612 Desiderata of a C++11 Database Interface Thomas Neumann 2013-03-15 2013-03   Library Evolution  
N3613 "Static If" Considered B. Stroustrup, G. Dos Reis, A. Sutton 2013-03-16 2013-03   Concepts  
N3614 unwinding_exception Herb Sutter 2013-03-11 2013-03   Evolution  
N3615 Constexpr Variable Templates Gabriel Dos Reis 2013-03-18 2013-03   Evolution  
N3617 Lifting overload sets into function objects Philipp Juschka 2013-03-14 2013-03   Evolution  
N3618 What can signal handlers do? (CWG 1441) Hans Boehm 2013-03-17 2013-03   Concurrency  
N3619 A proposal to add swappability traits to the standard library Andrew Morrow 2013-03-15 2013-03   Library Evolution  
N3620 Network byte order conversion Kyle Kloepper 2013-03-18 2013-03   Networking  

New paper: N3620, Network Byte Order Conversion -- Kyle Kloepper

A new WG21 paper is available. A copy is linked below, and the paper will also appear in the next normal WG21 mailing. If you are not a committee member, please use the comments section below or the std-proposals forum for public discussion.

Document number: N3620

Date: 2013-03-18

Network Byte Order Conversion

by Kyle Kloepper

Excerpt:

This proposal adds support to C++ for converting between host and network byte order.

New paper: N3619, A Proposal to Add Swappability Traits to the Standard Library -- Andrew Morrow

A new WG21 paper is available. A copy is linked below, and the paper will also appear in the next normal WG21 mailing. If you are not a committee member, please use the comments section below or the std-proposals forum for public discussion.

Document number: N3619

Date: 2013-03-15

A Proposal to Add Swappability Traits to the Standard Library

by Andrew Morrow

Excerpt:

This proposal proposes the addition of two new type property predicates to the C++ standard library: std::is_swappable<T, U = T> and std::is_nothrow_swappable<T, U = T>

 

New paper: N3618, What Can Signal Handlers Do? (CWG 1441) -- Hans-J. Boehm

A new WG21 paper is available. A copy is linked below, and the paper will also appear in the next normal WG21 mailing. If you are not a committee member, please use the comments section below or the std-proposals forum for public discussion.

Document number: N3618

Date: 2013-03-17

What Can Signal Handlers Do? (CWG 1441)

by Hans-J. Boehm

Excerpt:

CWG Issue 1441 points out that in the process of relaxing the restrictions on asynchronous signal handlers to allow use of atomics, we inadvertently made it impossible to use even local variables of non-volatile, non-atomic type. As a result of an initial discussion within CWG, Jens Maurer generated a proposed resolution, which addresses that specific issue.

Later discussion in SG1, both in Portland and during the February 2013 SG1 teleconference, raised a number of additional issues. Both Jens' solution and all prior versions of the standard still give undefined behavior to code involving signal handlers which we believe should clearly be legal. For example, a signal handler should be allowed to access "read-only" data that has not been modified since the signal handler was installed. Our goal is to correct such oversights, and allow some realistic signal handlers to be portable, while preserving a significant amount of implementation freedom with respect to what is allowable in a signal handler. In particular, we do not want to reinvent Posix' notion of async-signal-safe functions here.

...

We give several proposed changes and summarize the reasoning behind the change as well as some of the past discussion: ...