2016-12-31



Another year and another C++ Status! It’s hard to believe, but it’s my fifth time I am writing this summary. And, as usually, C++ language is very alive. The biggest news for the year?

Of course, it must be: the final draft for C++17!.

What else have happened? See my full report below.

Other reports: 2016, 2015, 2014, 2013, 2012.

Timeline

C++11/14 compiler status

C++17

Language features

Library features

ISO C++ meetings

February 29 - March 5: Jacksonville, FL, USA

June 20-25, Oulu, Finland

November 7-12: Issaquah, WA, USA

Compiler Notes

Visual Studio

GCC

Clang

Intel compiler

Conferences

CppCon

Meeting C++

Code::Dive in Wroclaw, PL

NDC Oslo 2016

Books

Summary

Timeline

January 14, Alex Stephanov is retiring.

February 29 - March 5: ISO meeting in Jacksonville, FL, USA

March 9, Clang 3.8 released

April 19-23, - ACCU Conference

April 1, Intel Compiler v17.0

April 27, GCC 6.1 Released

June 6-10, NDC Oslo

June 20-25, ISO meeting in Oulu, Finland

June 27, VS Update 3

August 22, GCC 6.2 released

Sep 2, Clang 3.9 released

September 17 - 23, CppCon 2016

November 7 - 12: ISO meeting Issaquah, WA, USA

November 16, VS 2017 RC available!

November 15 & 16, code::dive conference in Wroclaw, PL

November 18 & 19 MeetingCpp, Berlin

C++11/14 compiler status

Before we dive into newest stuff, let’s recall what’s the status of C++11 and C++14 implementation.

Just for the reference Clang (since 3.4 ), GCC (since 5.0) and Intel (version 15.0) already have full support for C++11/14.

Visual Studio (as of current VS 15.0 RC) lacks some features: Expression SFINAE (Partial), Two-phase name lookup, C99 preprocessor (Partial). See this VS blog post for more information. Still, I don’t see that situation as a blocker.

C++17

Let’s now focus on the main topic from this year.

During the ISO meeting in Oulu (June), the Committee accepted the draft for C++17. This is definitely not a minor release since a lot of features were added!

Here’s what we’ll get in the version:

Language features

Feature

Paper

New auto rules for direct-list-initialization

N3922

static_assert with no message

N3928

typename in a template template parameter

N4051

Removing trigraphs

N4086

Nested namespace definition

N4230

Attributes for namespaces and enumerators

N4266

u8 character literals

N4267

Allow constant evaluation for all non-type template arguments

N4268

Remove Deprecated Use of the register Keyword

P0001R1

Remove Deprecated operator++(bool)

P0002R1

Removing Deprecated Exception Specifications from C++17

P0003R5

Make exception specifications part of the type system

P0012R1

Aggregate initialization of classes with base classes

P0017R1

Lambda capture of *this

P0018R3

Using attribute namespaces without repetition

P0028R4

Dynamic memory allocation for over-aligned data

P0035R4

Unary fold expressions and empty parameter packs

P0036R0

Template argument deduction for class templates

P0091R3

Non-type template parameters with auto type

P0127R2

Guaranteed copy elision

P0135R1

New specification for inheriting constructors (DR1941 et al)

P0136R1

Direct-list-initialization of enumerations

P0138R2

Stricter expression evaluation order

P0145R3

constexpr lambda expressions

P0170R1

Differing begin and end types in range-based for

P0184R0

Pack expansions in using-declarations

P0195R2

Structured Bindings

P0217R3

Hexadecimal floating-point literals

P0245R1

Ignore unknown attributes

P0283R2

init-statements for if and switch

P0305R1

Inline variables

P0386R2

DR: Matching of template template-arguments excludes compatible templates

P0522R0

Improving std::pair and std::tuple

N4387

constexpr if-statements

P0292R2

Library features

Merged: The Parallelism TS, a.k.a. “Parallel STL.”, P0024R2

Merged: The Library Fundamentals 1 TS (most parts), P0220R1

Merged: File System TS, P0218R1

Merged: The Mathematical Special Functions IS, PDF - WG21 P0226R1

Resources:

SO: What are the new features in C++17?

cppreference.com/C++ compiler support.

While the above features look quite ok, we could see during the year that people were not entirely satisfied with the standard. As you might recall, last year I posted a survey on the preferred features for C++17 (number of votes for a feature, multiple selections were accepted), over 650 participatns:



And this is what went into the standard:



Note: array_view, string_view were renamed into span and string_span see this info, and here.

Not much to be honest… Fortunately, most of the really desired features are close to being standardized, so it’s good sign for C++20.

Also, you can see those slides from Michael Wang:
PDF: Michael Wong – C++17, is it great or just OK…

Still, other people aren’t such harsh for C++, Phil Nash: C++17 - Why it’s better than you might think.

I think that C++17 is a decent release. We could always have more, but the committee did a good job this year anyway.

If you’re unhappy about not having concept, ranges, modules in the standard… you can still play with their experimental versions!

What’s your opinion?

ISO C++ meetings

There were three committee meetings this year.

February 29 - March 5: Jacksonville, FL, USA

Herb Sutter: Trip report: Winter ISO C++ standards meeting

Botond Ballo, Trip Report: C++ Standards Meeting in Jacksonville, February 2016

Trip Report C++ Meeting at Jacksonville—J. Daniel Garcia

GoingNative 48: ISOC++ @Jacksonville Debriefing

June 20-25, Oulu, Finland

The most important meeting this year, they voted the C++17 draft!

Herb Sutter: Trip report: Summer ISO C++ standards meeting (Oulu)

M. Wong: C++17, All Final Features from Oulu in a Few Slides

November 7-12: Issaquah, WA, USA

Botond Ballo: Trip Report: C++ Standards Meeting in Issaquah, November 2016

Michael Wong: The view from Nov 2016 C++ Standard Meeting Issaquah

GoingNative 55: ISO C++ @Issaquah Debriefing

Compiler Notes

Current versions, updates

The best resource to stay up to date with all the features and compiler releases is probably: cppreference.com/C++ compiler support.

Visual Studio

Current version VS 2015 update 3 (27th June 2016)

But you can check out the recent RC candidate for VS 2017: Visual Studio 2017 Release Candidate.

C++14/17 Features and STL Fixes in VS “15” Preview 5

VS 2015 update 2 is c++17 feature complete

Vcpkg: a tool to acquire and build C++ open source libraries on Windows

Standards version switches in the compiler

C++ Core Guidelines Checkers: Preview of the Lifetime Safety checker

There are also various libraries available from Microsoft:

GSL: Guideline Support Library

Range-v3 on MSVC is Available on GitHub

GCC

Gcc 6.1 released in 27th April (currently 6.3, December 21, 2016)

GCC 6 Release Series Changes

Among The Changes/Features Coming For GCC 6

C++14 (the GNU++14 dialect) will be the default C++ mode over C++98

C++ Concepts are now supported when running in the GNU++1z/C++1z mode.

The libstdc++ library has experimental C++17 support for a number of new features along with an experimental implementation of the File System TS and the 2nd Library Fundamentals TS.

GCC 6 Will Warn You About Misleading Code Indentations

Current C++1y/C++14 Support in GCC

Looking forward to GCC6 – Many new warnings

The C++ Hightlights and more of GCC 6.1, meetingcpp

library status

On Windows you can use the latest MinGW distro from nuwen.net (Stephan T. Lavavej): Nuwen MinGW distro updated with GCC 6.3 and Boost 1.63.

Clang

Current version: 3.9.1 - 23 Dec 2016, Release Notes

Current C++ Support in Clang

libc++ C++1z Status

9 March 2016 - Clang 3.8 released

Clang has its implementation of modules; you can play with it here.

Intel compiler

Version 17.0 appeared in April 1, 2016, 17.0 (XE 2017) (release notes)

C++14 Features Supported by Intel® C++ Compiler

C++17 Features Supported by Intel® C++ Compiler - a bit outdated?

Conferences

As usually, we had two main C++ conferences - CppCon and Meeting C++, but I’d like to mention another one where C++ was the core topic - code::dive from Wroclaw, PL. Plus, there’s NDC Oslo with a good set of talks as well.

CppCon

Link to the official page

Link to YouTube channel with videos from the conference this year

Best CppCon 2016 talks, reddit

Trip reports:

Anthony Williams, trip report

Vittorio Romero, trip report

Meeting C++

Schedule.

This year Bjarne Stroustrup gave the opening keynote (“What C++ is and what it will become”). The closing keynote was presented by Louis Dionne (“C++ metaprogramming: evolution and future directions”).

Meeting C++ 2016 Playlist

Code::Dive in Wroclaw, PL

November 15th & 16th, code::dive

At last a really awesome C++ conference in Poland! :)

This year the conference took two days, and it included a lot of talks about C++ and native development.

code::dive is non-profit, annual conference for C++ enthusiasts
sponsored by NOKIA. The main idea behind the conference is to share the
knowledge beyond cutting edge technologies and build networking
between the people.

Some of the presenters: Scott Meyers, Venkat Subramaniam, Andrei Alexandrescu, Dan Sacks, Ulrich Drepper, Michael Wong, Chandler Carruth, Sean Parent, and much more!

code::dive 2016 playlist

NDC Oslo 2016

NDC Oslo 2016, 6th-10th June 2016

Videos from the conference

Speakers: Andrei Alexandrescu, Anthony Williams, Dan Saks, Detlef Vollmann, Mark Isaacson, and more.

BTW: The main problem with the conferences: how to watch all of those valuable talks! :) One tip is to watch it at bigger speed (1.5x, 2.0x, …) in the player, but still, it requires a lot of time!

Books

Some of the books released this year worth seeing:

Procedural Content Generation for C++ Game Development Paperback, January 30, 2016, January 30, 2016

Optimized C++, by Kurt Guntheroth, May 21, 2016

C++ Game Development Cookbook, by Druhin Mukherjee, May 30, 2016

C++ Standard Library Quick Reference by Peter Van Weert Marc Gregoire, June 14, 2016

Qt5 C++ GUI Programming Cookbook, by Lee Zhi Eng, July 29, 2016

C++ in 24 Hours, 6th Edition, by Rogers Cadenhead, Jesse Liberty, August 13, 2016

C ++ Windows Programming Paperback by Stefan Bjornander, September 12, 2016

Options and Derivatives Programming in C++, by Carlos Oliveira, September 30, 2016

C++: The Ultimate Beginners Guide to C++ Programing by Steve Tale, December 3, 2016

I am still waiting for Large-Scale C++ Volume I, John Lakos, but its release date is moving later and later…

Summary

I think that C++ developers were looking for much more with C++17. In 2015 we got a lot of promises, ideas about the new standard, so people started to dream too much. The reality appeared a bit different, a lot of those impressive features were not accepted or put on hold.

Still, we shouldn’t complain. C++ 17 will be a really decent release, and a lot of teams and companies are not even near accepting/using C++11. The adaptation is also an important factor when looking at the language use. It’s much better to have reliable, verified, checked features than something fragile that might change. I’d like to have concepts, ranges, modules soon… but C++20 is not that far. And yet I can play with those features using their quite stable experimental versions.

I’m glad to see that the committee is working consistently, and also quite transparently. You can feel the enormous community behind the language. So, all in all I think 2017 will be a good year for C++.

What do you think about C++ in 2016?

What was the most important event/news for you?

Did I miss something? Let me know in comments!

The poll below: what's your favourite C++17 feature?

Favourite C++17 features

Show more