March 2013

GCC's Move to C++ -- Linda Jacobsen

It's nice to see more C++ compilers being written in C++ rather than C. The Clang compiler is already all-C++. In recent years GCC has been slowly doing the same -- first compiling the C code as C++ code, and more recently using C++ itself.

Here is a readable summary of progress to date.

GCC's Move to C++

by Linda Jacobsen

Excerpt:

In 2008, 2009, and 2010, (i.e., at the beginning and after each milestone) Taylor provided formal plans for the next steps. There is no formal plan going forward from here. People will use C++ constructs in future patches as they deem necessary, but not just for the sake of doing so. Some will limit their changes to the times when they are patching the code anyway. Others approach the existing C code with an eye to converting code to C++ wherever it makes the code clearer or more efficient. Therefore, this is an ongoing effort on a meandering path for the foreseeable future.

GCC 4.8 released

GCC 4.8 has been released. C++-related improvements include the following highlights.

Language improvements:

  • G++ now implements the C++11 thread_local keyword...
  • G++ now implements the C++11 attribute syntax, e.g.
      [[noreturn]] void f();
    and also the alignment specifier, e.g.
      alignas(double) int i;
  • G++ now implements C++11 inheriting constructors, e.g.
      struct A { A(int); };
      struct B: A { using A::A; }; // defines B::B(int)
      B b(42); // OK
  • G++ now supports a -std=c++1y option for experimentation with features proposed for the next revision of the standard, expected around 2017. Currently the only difference from -std=c++11 is support for return type deduction in normal functions, as proposed in N3386.
  • The G++ namespace association extension, __attribute ((strong)), has been deprecated. Inline namespaces should be used instead.

Standard library improvements:

Improved experimental support for the new ISO C++ standard, C++11, including:

  • forward_list meets the allocator-aware container requirements;
  • this_thread::sleep_for(), this_thread::sleep_until() and this_thread::yield() are defined without requiring the configure option --enable-libstdcxx-time;
  • SSE optimized normal_distribution and simd_fast_mersenne_twister_engine.
  • Use of hardware RNG instruction for random_device on new x86 processors (requires the assembler to support the instruction.)

Webinar: C++ in the Multi-Device Enterprise -- David Intersimone

On Tuesday, March 26, Embarcadero's David Intersimone will be speaking live on the web:

C++ in the Multi-Device Enterprise

David Intersimone, "David I"
Vice President of Developer Relations and Chief Evangelist

Tuesday, March 26, 2013

  • 6:00AM PDT / 9:00AM EDT / 13:00 UTC
  • 11:00AM PDT / 2:00PM EDT / 18:00 UTC
  • 5:00PM PDT / 8:00PM EDT / 11:00AM 27-Mar Australia EDT

Description:

In every conversation, social network post and industry article, you hear about the need for multi-device support inside an Enterprise.  Terms like BYOD appear in most articles and Enterprise strategies.  Computing in a modern Enterprise is not only a Microsoft Windows world.  Enterprise organizations need to support a wide array of devices that their employees are using to be more productive.  The modern enterprise also needs to support additional software architectures including Cloud computing, multi-tier, REST and SOAP web services and more.

This webinar showcases how C++ can help satisfy the Enterprise’s need to support multiple devices on desktops, servers, web, mobile and multi-tiers in their infrastructure.  Coverage includes C++Builder’s support for ISV and enterprise class integrated database, middleware and cloud computing. With C++Builder XE3, you get integrated support for SQL Server, Oracle, Sybase, DB2, InterBase, SQL Anywhere, SQLite, MySQL, and cloud services including Windows Azure and Amazon.

During the webinar, you will learn how to:

  • Leverage platform services, devices and sensors in your multi-device C++ applications
  • Build multi-device C++ applications that connect with enterprise SQL databases
  • Create multi-device C++ desktop applications that consume web services using SOAP and REST
  • Build scalable multi-tier, multi-device, master detail database applications

Clang/LLVM developer conference sold out

As noted yesterday, the C++ Now 2013 conference has sold out well in advance. There's one other conference that sold out almost immediately we should also mention:

For those interested in developing for the Clang C++ compiler and its LLVM back-end, the Third Annual European LLVM Conference (announced here Jan 16) also sold out quickly -- all confirmed attendees received their confirmation mail at the end of January. If you didn't receive that mail in January, you can still add yourself to the waiting list in case some spots become available.

If you missed registering for C++ Now or the Clang/LLVM Conference, check out additional C++ events coming up around the world in the Upcoming Events section on the sidebar.

C++ Now 2013 sold out

As interest in C++ continues to increase, not only are we seeing more C++ events, but they're selling out quickly.

C++ Now (formerly BoostCon) just reported it is sold out with 53 days to go.

If you missed registering for C++ Now, check out additional C++ events coming up around the world in the Upcoming Events section on the sidebar.

 

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

New paper: N3617, Lifting Overload Sets into Function Objects -- Philipp Juschka

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

Date: 2013-03-14

Lifting Overload Sets into Function Objects

by Philipp Juschka

Excerpt:

Many generic libraries, including the standard library, draw from the functional programming paradigm, where passing around functions is a common occurence. This proposal aims to allow the usage of functional techniques with plain old overloaded functions and function templates without needing to create a function object by hand.