New site feature: Suggest an article

This site hosts a curated blog that provides pointers to the best and latest content in the world on modern Standard C++. From links to fresh new articles and books, to product news, to useful videos and events, to (of course) news about the standardarization process itself, we want you to be able to find out about it from here.

We want to link to all high-quality C++ content. But how can we make sure we don't miss something good? The blog editors know about a lot of the latest news and content, but no one person or small group can catalog it all, and we don't want to miss anything that C++ developers might find good and useful.

You can help. It's easy, and here's how.

Have you recently come across a high-quality article? a useful video? an upcoming event? cool product news? or something else likely of interest to a large subset of C++ developers? Then let us know using a cool new feature of the site: The "Suggest an Article" link available at the top right of the screen whenever you're logged into the site. (If you don't have a login, it's easy to get one: Registration is free.)

When you click on the Suggest link, you'll be taken to a screen that looks something like this. Here, you can write a draft blog post for the Blog Editors' consideration:

  • Enter a title, and the URL people should be taken to.
  • Pick an appropriate category.
  • Write a body that lets people know what it's about and why they should read/watch/follow the link.

As a guide, follow the style of existing blog posts already on this site. If you're curious, you can also check out the isocpp.org style guide used by our own editors; a subset of those features are available to you when writing blog suggestions.

You can make multiple suggestions and track their status via the Your Suggestions box on the right side of the suggestion page.

We can't accept all suggestions; some will be duplicates, others may not be deemed to be of wide enough interest to C++ developers. But many suggestions will be accepted -- if your post is accepted, the editors will edit it to tighten it up and conform to our style guide, and post it live for the world to see and appreciate with your name in the byline as the author of the blog post. If that happens to your suggestion, congratulations -- that's your name up there in bright lights on the home page of isocpp.org!

A few of you already found the Suggest link, and so we're happy to report that the very first user blog post suggestion by Blair Davidson went live today. Thanks, Blair, and thanks in advance to all who will help us find and link to the best high-quality C++ content in the world.

C++ Questions and Answers -- Herb Sutter

This blog post was suggested by Blair Davidson. The video is from summer 2011, shortly before the C++11 standard was ratified:

Herb Sutter: C++ Questions and Answers

Jun 07, 2011

Herb's [previous] appearance on C9 was a relatively short chat with me about C++0x. You wanted more questions asked and some of you thought I was just too soft on Herb. Well, Herb decided that the best way to get the questions you want asked is, well, to have you ask them. Most of the highest user-rated questions were asked and Herb answers with his usual precision. So, without further ado, it's C++ question and answer time with Herb Sutter, powered by you.

Continue reading...

scope(exit) in C++11

A C++ note in passing from an indie game developer. He notes that Boost has a similar feature already (see the BOOST_SCOPE_EXIT macros and discussion of alternatives) but likes that you can write the basic feature yourself in under 10 lines, have it work like a statement instead of a BEGIN/END macro pair, and use it with other C++11 features like lambdas.

scope(exit) in C++11

I really like the scope(exit) statements in D. They allow you to keep the cleanup code next to the initialization code making it much easier to maintain and understand. I wish we had them in C++.

Turns out this can be implemented easily using some of the new C++ features...

Continue reading...

Storage Layout of Polymorphic Objects -- Dan Saks

It's great to see Dan writing about C++ again. Here's his latest today, in Dr. Dobb's:

Storage Layout of Polymorphic Objects

By Dan Saks

Adding at least one virtual function to a class alters the storage layout for all objects of that class type.

Adding at least one virtual function to a class alters the storage layout for all objects of that class type. In this article, I begin to explain how C++ compilers typically implement virtual functions by explaining how the use of virtual functions affects the storage layout for objects.

Continue reading...

(Not) Using std::thread -- Andrzej KrzemieĊ„ski

Andrzej Krzemieński writes:

(Not) using std::thread

This post is about std::thread but not about threads or multi-threading. This is not an introduction to C++ threads. I assume that you are already familiar with Standard Library components thread and async.

I encountered a couple of introductions to C++ threads that gave a code example similar to the one below:

void run_in_parallel(function<void()> f1, function<void()> f2)

{

    thread thr{f1}; // run f1 in a new thread

    f2();           // run f2 in this thread

    thr.join();     // wait until f1 is done

}

While it does give you a feel of what thread’s constructor does and how forking and joining works, I feel it does not stress enough how exception-unsafe this code is, and how unsafe using naked threads in general is. In this post I try to analyze this “safety” issues...

Continue reading...

SG4 (Networking) wiki online

Study Group 4 (SG4), which focuses on Networking topics, now has a wiki on GitHub for those who want to follow its work and near-term deliverables.

The link is also available via SG4's entry in the SG list on The Committee page.

Please contact the SG4 chair, Kyle Kloepper, for further information.

Reactive Extensions (Rx) now supports LINQ in C++, goes open source

Reactive Extensions (Rx) is now open source and supports LINQ styles in C++.

From the announcement, Rx is already being used for a number of highly responsive applications including GitHub for Windows:

According to Paul Betts at GitHub, "GitHub for Windows uses the Reactive Extensions for almost everything it does, including network requests, UI events, managing child processes (git.exe). Using Rx and ReactiveUI, we've written a fast, nearly 100% asynchronous, responsive application, while still having 100% deterministic, reliable unit tests. The desktop developers at GitHub loved Rx so much, that the Mac team created their own version of Rx and ReactiveUI, called ReactiveCocoa, and are now using it on the Mac to obtain similar benefits."

In addition to Rx's original support for .NET and new support for Javascript, Rx has also added support for C++:

Rx++: The Reactive Extensions for Native (RxC) is a library for composing asynchronous and event-based programs using observable sequences and LINQ-style query operators in both C and C++.

Ix++: An implementation of LINQ for Native Developers in C++.

Where to download or find out more: https://rx.codeplex.com/

On the Superfluousness of std::move -- Scott Meyers

Scott answers reader questions about whether std::move is superfluous... couldn't one size of std::forward fit well enough on everyone?

On the Superfluousness of std::move

Scott Meyers

During my presentation of "Universal References in C++11" at C++ and Beyond 2012, I gave the advice to apply std::move to rvalue reference parameters and std::forward to universal reference parameters.  In this post, I'll follow the convention I introduced in that talk of using RRef for "rvalue reference" and URef for "universal reference."

Shortly after I gave the advice mentioned above, an attendee asked what would happen if std::forward were applied to an RRef instead of std::move.  The question took me by surprise.  I was so accustomed to the RRef-implies-std::move and URef-implies-std::forward convention, I had not thought through the implications of other possibilities.  The answer I offered was that I wasn't sure what would happen, but I didn't really care, because even if using std::forward with an RRef would work, it would be unidiomatic and hence potentially confusing to readers of the code.

The question has since been repeated on stackoverflow, and I've also received it from attendees of other recent presentations I've given.  It's apparently one of those obvious questions I simply hadn't considered.  It's time I did.

Continue reading...

CGAL 4.1 released (Computational Geometry Algorithms Library)

The CGAL Open Source Project is pleased to announce the release 4.1 of CGAL, the Computational Geometry Algorithms Library.

Besides fixes to existing packages, the following has changed since CGAL 4.0:

  • New compiler support: the Apple Clang compiler versions 3.1 and 3.2 are now supported on Mac OS X.

See http://www.cgal.org/releases.html for a complete list of changes.

The CGAL project is a collaborative effort to develop a robust, easy-to-use, and efficient C++ software library of geometric data structures and algorithms, like

  • triangulations (2D constrained triangulations and Delaunaytriangulations in 2D and 3D, periodic triangulations),
  • Voronoi diagrams (for 2D and 3D points, 2D additively weighted Voronoi diagrams, and segment Voronoi diagrams),
  • Boolean operations on polygons and polyhedra,
  • regularized Boolean operations on polygons with curved arcs
  • arrangements of curves,
  • mesh generation (2D, 3D and surface mesh generation, surface mesh subdivision and parametrization),
  • alpha shapes (in 2D and 3D),
  • convex hull algorithms (in 2D, 3D and dD),
  • operations on polygons (straight skeleton and offset polygon),
  • search structures (kd trees for nearest neighbor search, and range and segment trees),
  • interpolation (natural neighbor interpolation and placement of streamlines),
  • optimization algorithms (smallest enclosing sphere of points or spheres, smallest enclosing ellipsoid of points, principal component analysis),
  • kinetic data structures

Some modules are distributed under the terms of the LGPL Open Source license (GNU Lesser General Public License v3 or later versions). Most modules are distributed under the terms of the GPL Open Source license (GNU General Public License v3 or later versions). If your intended usage does not meet the criteria of the aforementioned licenses, a commercial license can be purchased from GeometryFactory.

For further information and for downloading the library and its documentation, please visit the CGAL web site.

Post-Portland mailing available

The post-Portland mailing is now available. It includes meeting minutes, updated issues lists, and the papers adopted at this meeting (among other papers).

Of particular note is the Evolution Working Group paper status, now present again and maintained by Ville Voutilainen. Thanks, Ville!

 

WG21 Number PL22.16 Number Title Author Document Date Mailing Date Previous Version Subgroup Disposition
SD-1 12-0000R3 2012 PL22.16/WG21 document list Clark Nelson 2012-11-03 2012-11      
SD-2 12-0001R2 ISO WG21 and INCITS PL22.16 membership list Clark Nelson 2012-09-12 2012-09      
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      
N3453 12-0143 Minutes, WG21 Teleconference 2012-10-5 Kyle Kloepper 2012-10-5 2012-11      
N3454 12-0144 Minutes, WG21 Meeting No. 54, 15-19 October 2012 Portland, Oregon, USA Kyle Kloepper 2012-11-3 2012-11      
N3455 12-0145 Minutes, PL22.16 Meeting No. 59, 15-19 October 2012 Portland, Oregon, USA Kyle Kloepper 2012-11-3 2012-11      
N3456 12-0146 Range arguments for container constructors and methods, with wording Jeffrey Yasskin 2012-11-03 2012-11   Library  
N3457 12-0147 Algorithm std::iota and its modifications. Vladimir Grigoriev 2012-10-30 2012-11   Library  
N3458 12-0148 Simple Database Integration in C++11 Thomas Neumann 2012-10-22 2012-11   Library  
N3459 12-0149 Comparison of Two Database Access Methodologies Bill Seymour 2012-10-13 2012-11   Library  
N3462 12-0152 std::result_of and SFINAE E. Niebler, D. Walker, J. de Guzman 2012-10-18 2012-11 N3436= 12-0126 Library Adopted 2012-10
N3463 12-0153 Portable Program Source Files Beman Dawes 2012-11-02 2012-11   Evolution  
N3465 12-0155 Adding heterogeneous comparison lookup to associative containers for TR2 (Rev 2) Joaquín Mª López Muñoz 2012-10-29 2012-11 N2882= 09-0072 Library  
N3466 12-0156 More Perfect Forwarding Mike Spertus 2012-11-03 2012-11   Evolution  
N3467 12-0157 Runtime-sized arrays with automatic storage duration (revision 3) Jens Maurer 2012-10-29 2012-11 N3412= 12-0102 Core  
N3468 12-0158 User-defined Literals for Standard Library Types (version 2) Peter Sommerlad 2012-10-24 2012-11 N3402= 12-0092 Evolution  
N3469 12-0159 Constexpr Library Additions: chrono, v3 B. Kosnik, D. Krügler 2012-10-18 2012-11 N3303= 11-0073 Library Adopted 2012-10
N3470 12-0160 Constexpr Library Additions: containers, v2 B. Kosnik, D. Krügler 2012-10-18 2012-11 N3304= 11-0074 Library Adopted 2012-10
N3471 12-0161 Constexpr Library Additions: utilities, v3 B. Kosnik, D. Krügler 2012-10-18 2012-11 N3305= 11-0075 Library Adopted 2012-10
N3472 12-0162 Binary Literals in the C++ Core Language James Dennett 2012-10-19 2012-11   Core  
N3473 12-0163 C++ Standard Library Active Issues List (Revision R80) Alisdair Meredith 2012-11-03 2012-11 N3438= 12-0128 Library  
N3474 12-0164 C++ Standard Library Defect Report List (Revision R80) Alisdair Meredith 2012-11-03 2012-11 N3439= 12-0129 Library  
N3475 12-0165 C++ Standard Library Closed Issues List (Revision R80) Alisdair Meredith 2012-11-03 2012-11 N3440= 12-0130 Library  
N3477 12-0167 C++ Internet Protocol Classes A. Fabijanic, G. Obiltschnig 2012-10-28 2012-11   Networking  
N3478 12-0168 Core Issue 1512: Pointer comparison vs qualification conversions Jens Maurer 2012-10-29 2012-11   Core  
N3479 12-0169 Priority Queue, Queue and Stack: Changes and Additions G. Powell, T. Blechmann 2012-11-02 2012-11 N3443= 12-0133 Library  
N3480 12-0170 C++ Standard Core Language Active Issues, Revision 81 William M. Miller 2012-11-03 2012-11 N3382= 12-0072 Core  
N3481 12-0171 C++ Standard Core Language Defect Reports and Accepted Issues, Revision 81 William M. Miller 2012-11-03 2012-11 N3383= 12-0073 Core  
N3482 12-0172 C++ Standard Core Language Closed Issues, Revision 81 William M. Miller 2012-11-03 2012-11 N3384= 12-0074 Core  
N3484 12-0174 A URI Library for C++ G. Matthews, D. Berris 2012-11-01 2012-11 N3420= 12-0110 Networking  
N3485 12-0175 Working Draft, Standard for Programming Language C++ Stefanus Du Toit 2012-11-02 2012-11 N3376= 12-0066    
N3486 12-0176 C++ Editor's Report, October 2012 Stefanus Du Toit 2012-11-02 2012-11      
N3487 12-0177 TLS and Parallelism Pablo Halpern 2012-05-08 2012-11   Concurrency  
N3488 12-0178 Evolution Working Group paper status Ville Voutilainen 2012-11-02 2012-11   Evolution  
N3489 12-0179 A Rational Number Library for C++ Bill Seymour 2012-10-13 2012-11 N3414= 12-0104 Numerics  
N3490 12-0180 ADL Control for C++ Dave Abrahams 2012-10-31 2012-11   Evolution  
N3491 12-0181 Minutes: SG4 Networking, October 2012 Alex Fabijanic 2012-11-01 2012-11      
N3492 12-0182 Use Cases for Compile-Time Reflection (Rev. 2) Mike Spertus 2012-11-03 2012-11 N3403= 12-0093 Evolution