Herb Sutter on software, hardware, and concurrency

We Have FDIS! (Trip Report: March 2011 C++ Standards Meeting)

News flash: This afternoon, the ISO C++ committee approved the final technical changes to the C++0x standard. The new International Standard for Programming Language C++ is expected to be published in summer 2011.

The spring 2011 ISO C++ meeting was held on March 21-25 in Madrid, Spain. As previously reported, the goal of this meeting was to finish responding to national body comments on the Final Committee Draft (FCD), and to accept the last set of technical changes and approve a Final Draft International Standard (FDIS) for the final international ballot.

We reached that goal. Indeed, thanks to everyone’s hard work not just at this meeting but at and in between the meetings leading up to Madrid, we were done early enough in the week that we also got to work on resolving a number of lower-priority features and still end a day early on Friday, instead of also working all day Saturday as originally planned. (That said, it wasn’t a holiday — as usual for ISO C++ meetings, pretty much every day you could find roughly half of committee members working long past midnight in technical group sessions on particular issues and updating and reviewing proposed wording changes, then starting up again bright and early the next morning.)

Where are we in the process?

At around 16:00 Madrid time on Friday, the committee voted to approve the FDIS document, to many rounds of applause and thanks to our hosts, our project editor Pete Becker, our subgroup chairs Bjarne Stroustrup, Steve Adamczyk, Alisdair Meredith, Howard Hinnant, Lawrence Crowl, and Hans Boehm, and everyone else who has worked so hard over the last few years to bring us to this point.

The work isn’t quite done yet. The project editor now needs to update the working draft with the changes approved at this meeting, and a review committee of over a dozen volunteers will review it to help make sure those edits were made correctly. The result will be the FDIS draft. Once that happens, which we expect to take about three weeks, we will transmit the FDIS to ITTF in Geneva to kick off the final up/down international ballot which should be complete this summer.

If all goes well, and we expect it will, the International Standard will be approved and published in 2011, henceforth to be known as C++ 2011.

A word about quality

Just like the first time a decade and a half ago, this time we again took longer than we initially thought to produce the second C++ standard. Partly it was because of early ambitious feature scope, but primarily it was in the name of quality.

Perhaps the most heartening thing to me is that this standard is widely considered among committee old-timers as the highest-quality FDIS document we have shipped in the history of WG21, and we believe it to be clearly in superbly better shape than the first standard’s FDIS that we approved in November 1997 for ballot in early 1998. This time, virtually all features have actually been implemented in at least some shipping compilers, and design churn and overall design risk are significantly lower. This is particularly thanks to having shipped a large set of C++0x’s extensions first in the form of the (non-normative) Library Extensions TR (aka Library TR, aka TR1) which encouraged early vendor implementation of its features in a form that the committee could still tweak, even with breaking changes as needed, before incorporating them in an international standard.

Of course, we know there are bugs and as usual we expect to have a tail of Defect Reports (DRs, aka bug fixes and patches) to process over the next few meetings; but the tail is smaller, and many of those most involved expressed clear confidence that it will be far less than the five-year tail we had on the first standard.

But, as Josee Lajoie said so eloquently in Morristown in November 1997, and as Bjarne Stroustrup and others echoed this afternoon: “Hey, we’re done!”

Let me once again express my personal thanks and appreciation to everyone who has contributed in person and electronically to this standard. We couldn’t have done it without you. Thank you, and enjoy the moment!

Looking forward

It’s our tradition to schedule one meeting a year outside the continental United States, and preferably outside North America, because this helps international participation by making it easier for people from all parts of the world to attend. Next year, as we’ve done before, this “un-American” meeting will be the Kona meeting, which is closer for folks in eastern Asia and Australia who may wish to attend.

Here are the planned dates and locations for the remaining 2011 and 2012 ISO C++ standards committee meetings:

I noticed, after the last mailing, that there were some suggestions to remove certain features that had not been implemented yet. Specifically, things like constructor delegation, member initializers, and user-defined literals.

Were those removed, or did they stick around for the FDIS? Also, there was a lot of discussion about noexcept; how did that go?

Also, particularly with clang now available as a strong base code for modifications, is there going to be another effort to get major features like Concepts and Modules going for the next C++ revision? Has the Evolution Working Group started to get going on this?

I know that Bjarne wanted to see C++ move to a 3-5 year cycle of releases. Does the committee have a plan for getting to that kind of release schedule?

I assume you would’ve mentioned any breaking changes (i’m sure this wasn’t one of those kinds of meetings) but is there any way to know what was actually done at this meeting? Were decisions made regarding best practices or somesuch thing or were there actual feature-specific decisions being made?

I know the many compilers have a good chunk of the #1 features from C++0x, but i couldn’t help expecting that the board would’ve actually published the final ‘set in stone’ draft. I have the latest…. is the update more like errata addendum? May i continue to use C++0x as documented in my compilers, or should i wait until the final draft is available.

I know that last question is dependent on many factors regarding production-quality/cutting edge etc. i’m just not clear how much of the extant draft will change…..

Thanks so much to all the board, and especially you (in regards to your public outreach regarding these, and previous, sessions).

@Alfonse: Yes, there were proposals to remove a few features including those ones, and we talked about those a bit but they stayed in — not only was there no consensus to remove them, but only a minority was in favor of such a change, so nothing happened.

@HumanBlade: No major changes were made at this meeting other than fixing bugs. The details and meeting minutes will be posted in a couple of weeks as part of the normal post-meeting mailing, which will be posted at the committee website. We are indeed publishing the near-final-set-in-stone draft including all the changes approved at this meeting, and that draft will be in the upcoming mailing or the one following it.

P.S.: I should have noted that we did remove the ability to write ‘explicit’ on the class and ‘new’ on a member to say it hides a member of the same name in a base class (e.g., class my_class explicit : public base { public: void f() new; };) because there wasn’t consensus that we had the design quite right yet. That’s all I can think of. And definitely no new features were added; we are not allowed to add new features in the final meetings before shipping the standard.

@Alfonse: We’re going to have more of a discussion of ‘what comes next and how soon’ at the next meeting in August. As for new features, it remains to be seen what people will propose, but I’m already hearing some murmuring about concepts… so we’ll have to wait and see but I wouldn’t be surprised to see work resume on those. I personally don’t think the concepts design in its current form is quite right (so did other people, which is one reason it was pulled) and so if we do resume work on that I personally would like to see us take a fresh look at the approach based on the lessons learned going down the paths we’ve already tried.

How will the standard be published? Will it be widely available? So many ISO standards (e.g., SQL) are available only at a cost of hundreds or thousands of dollars, which means they are inaccessible to the individual programmer or student. Please say the C++ standard will be made available freely…

Congratulations! This is really good news. I was thriving to use some of the new features like lambda functions, type inference and rvalue references but I was forbidden because the standard was not approved yet. Now I am waiting impatiently for the summer!

The main thing is that the standard is not a tutorial intended for real people to read. :) It’s a specification intended mainly for compiler writers and standard library implementers, and for people like Scott Meyers to consult as they write the actual readable books about the language. Trust me, you don’t want to read the standard to learn about the language.

Having said that, people are often interested, so he’s how to do it:

You can get a copy of every draft, including the final draft (but without the ISO cover page) for free: Every intermediate draft of the C++0x standard, including the one in the pre-Madrid mailing a couple of weeks ago (which is only a few diffs away from the final text), is freely available at the WG21 website; go to the papers page and browse for “working draft.” In one of the next two mailings, we will publish the post-Madrid updated draft, which should be identical to the published standard except for the cover page and possibly some formatting.

If you want to buy a copy (don’t ask me why, but let’s just say), here are the options I know of from most to least expensive: 1. ISO asserts copyright on the actual final published standard text, and does charge a lot of money, which they will happy accept if you buy a copy from the ISO store. 2. The national bodies’ versions differ only by the cover page and some national bodies (notably ANSI) have always made their versions available for less (currently about $600). 3. Finally, in the past the UK national body had an arrangement to publish the standard in book form at normal book prices, and may do the same thing again this time; consult your favorite BSI member, such as Alisdair Meredith, for more information.

I am glad to hear that the most important part is still there. Thank you for replying.

Looking forward to general availability of C++11 implementations. It’s great that major compilers already support some pieces of it (with GCC leading) and that Clang is being developed at such an amazing pace.

[…] updates on this topic. Randyll writes “On the 25th, in Madrid, Spain, the ISO C++ committee approved a Final Draft International Standard (FDIS) for the C++ programming language. This means that the proposed changes to the new standard so far […]

The “old” concepts proposal really seemed to end up as a huge monolithic blob which tried to do 3 or 4 radically different things:

It was initially sold as “a way to make template errors more comprehensible”, and then it also became “a tool for enabling new metaprogramming tricks”, and even “a mechanism for type unification in C++”.

Seems like a good starting point for future work could be to split up these concerns, and tackle one of them at a time.

Bryan, the cheapest source I am aware of for a PDF edition of the current C++ standard is a company called Techstreet. This source is linked from the INCITS homepage, so it should be authoritative. You can get a copy of the standard there for $30. In the past, you could get a copy from the ANSI webstore for the same amount. The $381 it costs currently represents a massive price increase.

[…] Next time I will be more consistent. I tried hard to keep as close to the std library as possible while inserting Qt objects just when they were needed but this approach soon broke down and the library has parts using Qt and parts using std::string or other std libraries. While the C++ standard containers do not represent many problems, I really need to chose one and only one string library. In the future I will go for Qt at least for as long as C++0x is not an approved standard (which means until the summer according to the great news from Herb Sutter). […]

[…] Qt is a fantastically designed library. However, every now and then I think of something that I wish they offered that they don’t. It’s almost always something small and easily worked around, but it would be nice if it were just there. This time around, that feature is the ability to connect a signal to a function which is not a member of a class/struct. Specifically, I think it would be really cool if I could connect it to a c++0x lambda! Especially now that the ISO C++ committee approved the C++0x final draft. […]

I am curious what the new C++ will be called. C++0x? C++0B? or C++2011? I am also more concerned with when VC++ will implement the new standard? Is it in Visual Studio 2012? Thanks for all the hardworking.

Gevorg, the decltype bug described in N3233 was fixed in Madrid. The wording suggested in that paper was slightly tweaked, but the end result is the same: for C++11, we’ll have a decltype-based result_of that actually works. I’m very relieved.

The standard is not a good place to learn C++, and it is not the sort of thing you read cover to cover. However, it is an essential reference material. This is especially true for the standard library.

I have Jossutti’s book as well; however, the standard is the best electronic reference for the standard library. Also, it spells out fine grained details that are missing from other materials.

One of C++’s biggest weaknesses today is the lack of good online documentation and reference material. To get a good handle on C++ today, you need to buy yourself a pretty heavy bookshelf. I think that contributes to the problem of many programmers not having a good grasp of C++ or the standard libraries. Many programmers don’t know where to get started on learning c++.

I’d really like to see at least sections 17 through 27 of the standard online for free in HTML form. That way I could pass around links to functions.

[…] Force (ITTF) will review the steering committee’s Final Draft International Standard (FDIS) will review and, barring any complications, publish the draft later this year. It will be known as C++ […]

[…] Seems like the wait is over. The seemingly-never-ending deliberations have been concluded by the standards committee approving the changes that lead to the adoption of the C++0x standard. Sutter has more on his blog here. […]

Congratulations – I can’t wait for it to arrive at a compiler near me sometime. It would be great for the committee to select a release name soon, the press have a mixture and everyone is guessing and suggesting. Personally I like the horizontal symmetry of C++0B.

But there is plenty of online reference material for C++. Dinkumware has publicly available docs for the entire standard library. MSDN has docs. My personal go-to source for when I need to find a method is http://www.cplusplus.com.

Simply putting chapters online isn’t going to help people to properly use C++. And that is generally the problem with C++ adoption: it has so many possibilities, but the obvious ones aren’t necessarily the right ones.

First of all, Congratulations! Good work and I sincerily hope next “release” will be within five years (because it’s important to keep language up to date, alive etc etc).
Second, Now when it is finally prooven that C++ isn’t “dead” etc. etc. as was claimed for years by Java and MJ (Microsoft’s Java) guys is there any chance that VS will be written in C++ again?
Why we (C++ developers) are being punished by Microsoft (VS2010 performance wise is just pathetic and doesn’t matter what “they”‘ll say managed will never outperform native, I hope you agree with me)?
Why on earth do we have to write native apps in managed environment?

This is good news for those of us that have ignored the standardization process up tip now. Stability leads to adoption and use. Now the big question is where do vendors stand with respect to implementation? I’m especially interested in the LLVM/CLang folks myself.

More importantly when are the books due to arrive? Some of us still like paper you know. Has anything been announced yet by the major writers?

[…] the end of the story. In “new” C++ (i.e., the language defined by the international standard poised to be adopted this year and commonly referred to as C++0x), the type of pcs->i is also const int, which, given the […]

[…] Force (ITTF) will review the steering committee’s Final Draft International Standard (FDIS) will review and, barring any complications, publish the draft later this year. It will be known as C++ […]

[…] is undefined. I don't know what C++0x has to say about the subject, but seeing as the standard was approved only two weeks ago and hasn't even been formally published yet, it seems premature to expect all compilers to conform […]

Um… I’ve just been looking in the new FDIS at the current description of how num_put is supposed to work (which is quite like the 2003 version) which it seems to me uses the word ‘added’ where ‘prepended’ would IMO be better on the last sentence of page 702 (2nd page of the 22.4.2.2.2 section). (The 2003 document has the same incorrect implication.) How can I send a comment like that to comp.std.c++ (where I assume an appropriate C++ expert might be hanging around)?

Oh, and congrats on reaching FDIS! Can’t wait for some of the some of the new stuff to become standard enough so it can be portably used!

Thanks !
It will allow us to do a big step forward in terms of coding time and conciseness, which is always a good news.
C++ is an old language that needed and still need to catch up with productivity boost coding time features just like the way C# evolves (for having been a .NEt dev too). It is a fast languages in terms of the application speed it produces so why should it not be a fast to code language as well ? Let’s beat the hell out of C# on this one too !

What a wonderful birthday present for me (March 25). I love C++ and am excited about all of the new features being added. A lot of people think C++ is getting old, but the new features address a lot of the stuff I had felt were missing (almost all of what I had wanted). The new standard makes C++ perfect for me.

All C++ committee documents are public, except for membership lists and the final text of the standard. ISO rules, sorry — I did ask permission to leave the draft unprotected, but ISO prohibits sharing the final text of FCD and FDIS documents, so ISO said no because that draft is technically identical to the FDIS and differs from the final FDIS text by only the cover page.