Share via


C++ Conformance Roadmap

C++ has long been a mainstay of the computing industry, gaining significant adoption since it came on the scene in the early 1980s.  Yet even with its rich history, it continues to evolve in meaningful ways, now on a faster cadence than we’ve seen in the past.  In fact, this has already been a big year for C++. In April, less than two years after the ratification of C++11, the ISO C++ committee voted to adopt the feature set for the upcoming C++14 standard, which is expected to be done in the next year and which rounds out the C++11 standard with key features like generic lambdas.

We started on the path of C++11 support in Visual C++ with our Visual Studio 2010 release, in which we implemented several C++11 features, including auto and lambda functions.  In Visual Studio 2012, we implemented more of the standard, with support for features like range-based for loops, standard threads, and futures.  And this week we announced Visual Studio 2013 Preview, which as I noted in my blog post on the Preview earlier this week, provides more C++11 support, including capabilities like variadic templates and delegating constructors.  However, as several of you have pointed out in comments on that post, we still have a ways to go in providing full support for C++11.

Today at his Build 2013 conference session on “The Future of C++”, Herb Sutter (an architect on our Visual C++ team and the convener of the ISO C++ standards committee) announced a roadmap for when Visual C++ would implement the complete feature set of the current ISO C++ standard. Because C++14 “completes C++11,” and because as of two months ago we now know C++14’s feature set, we consider draft C++14 to be the current target. I think a particular statement of Herb’s clarifies our approach nicely:

“Visual C++ is targeting C++14, so we’re treating all the new features in C++11 and C++14 as a single bucket of work to do.  We’ll do all of the features, but we’ll work on them in the order that delivers the most value soonest to customers. That means we will implement all of C++11 and C++14, but some high-value C++14 features, such as generic lambdas, should come before others from C++11.”

We will share a more specific timeframe for full conformance as we work through the details, but the following slide from Herb’s talk presented what we know now, listing the features remaining to be added and the approximate order in which we expect them to appear.

There are six “buckets” of remaining language features which together will bring Visual C++ to be a full implementation of not only C++11 and C++14, but also the “C++14 wave” that includes three additional technical specifications also expected to be completed by the ISO C++ committee in the next year: a file system library based on Boost File System version 3 (the previous version 2 is already included in Visual C++ 2012), an initial networking library, and set of language extensions called “Concepts” that enable expressing template constraints and are important to improve template type-checking and deliver greatly improved diagnostics.

The first two buckets of features will be available in Visual C++ 2013 RTM later this year. Herb also announced that, in response to customer requests, the RTM version will also include a few tactical C99 language extensions when compiling C code, so that some popular community libraries (including FFmpeg) will now be able to compile with Visual C++ 2013.

Some subset of the next two buckets, which include some of the most highly anticipated C++14 features (such as generic lambdas and generalized lambda capture) are already being implemented in parallel with our work on Visual C++ 2013 and will ship in a CTP release soon after the Visual C++ 2013 RTM. This CTP will also include an implementation of the async/await feature Microsoft is proposing for the C++ standard; async/await has not only been the number one request from our C++/CX customers for WinRT programming, it is more generally wonderfully useful for any asynchronous code.

Herb also announced today the GoingNative conference, happening in a few months on September 4-6 on Microsoft’s campus in Redmond, WA.  At that event, we will be able to share another progress update with more specific details on the timing and feature set of the upcoming CTP and related work announced in today’s roadmap. The GoingNative conference will include a keynote by Bjarne Stroustrup, the creator of C++, as well as talks by a “who’s who” of the C++ community and active standards committee members: Scott Meyers, Andrei Alexandrescu of Facebook, Chandler Carruth of Google, Stephan T. Lavavej of Microsoft, Sean Parent of Adobe, Michael Wong of IBM (who also represents Canada in ISO C++ and who is the current chairman of OpenMP), and more.  Registration for the conference is now open.

We are delighted to see the continued momentum behind C++ across the industry, and we look forward to continuing to being a part of this important language and community.  For more information and to discuss these efforts, please see the Visual C++ team blog.

Namaste!

Follow me on Twitter at https://twitter.com/ssomasegar.

Comments

  • Anonymous
    June 28, 2013
    Really appreciate outlining this roadmap in advance & looking forward to the coming update(s) at the GoingNative -- transparency++ :-)

  • Anonymous
    June 28, 2013
    How many versions of Visual C++ do you expect we are willing to pay for, so that we can use C++11 with Microsoft tooling?!

  • Anonymous
    June 28, 2013
    I didn't catch the first 15 minutes of Herb's keynote, but is it correctly understood that everything in the CTP bucket will not be added as regular updates to any existing compiler? (That is, we'll get the preview as an update for VC2013, but the final production-quality feature will only be available in VC2014 or later)?

  • Anonymous
    June 28, 2013
    The comment has been removed

  • Anonymous
    June 28, 2013
    @Moondevil This might provide some more information, possibly you won't be paying for an individual release much longer. arstechnica.com/.../c99-acknowledged-at-last-as-microsoft-lays-out-its-path-to-c14 "And what of the more distant future? Well, Microsoft probably won't have Visual Studio 2016, 2017, 2018, and so on. S. Somesegar, corporate Vice President of the Developer Division at Microsoft, said that the long-term ambition was simply to have Visual Studio, updated on a subscription basis."

  • Anonymous
    June 28, 2013
    @STL > Note that since VS 2005 (which is as far back as I'm familiar with), we've always shipped new features in new major versions Yeah, but note that since VS2005, your team has also been heavily criticized for not shipping new features. ;) But in any case, thanks for clarifying. I just wanted to make sure I understood correctly, since last year 's message was quite different. I'm guessing this means nothing has changed for bug fixes as well, then? It's still an "unless it's absolutely ridiculousy critical, don't expect to see it fixed unless you wait for, and buy, and upgrade to, the next major version" policy?

  • Anonymous
    June 28, 2013
    @Stephan T. Lavavej - MSFT  Visual Studio 2010 is still in ALPHA. The bug list is never ending and performance is poor at best  Your greatest success has been in lowing developers acceptability standards so unproductive software is praised.

  • Anonymous
    June 29, 2013
    This is a really a great news. The importance that C++ has gained and Microsoft commitment towards C++ is really great for all C++ developers.

  • Anonymous
    June 29, 2013
    The comment has been removed

  • Anonymous
    June 29, 2013
    Thank you for new features! Does VS2013 support N3276 for decltype?

  • Anonymous
    June 30, 2013
    @Jesper: You can find last year's message here, and I hope you'll agree it's exactly what we ended up doing -- this is the video clip of the "out of band" announcement, which was about shipping more often than every 2-3 years, which I think we've done: channel9.msdn.com/.../C-11-VC-11-and-Beyond Also, there's a balance between agility and stability: Taking breaking changes once a year is pretty aggressive and a big deal for some customers. Even GCC, which just shipped 4.8.1 with the last couple of small C++11 language features for full language conformance, is holding back a conforming standard library until GCC 4.9 because it will cause breaking changes. We would only ship a new language feature in a VS Update if we could be sure it couldn't possibly break existing code; it would be awful if someone installed Update N+1 and found they couldn't build a project that worked fine with Update N. So by default expect no language or library extensions in VS Updates, though we do reserve the right do it anyway but if so it should be viewed as a bonus that was delivered only after very careful analysis. @weierstrass: Repeating from my answer to your same comment on my talk video page... Actually we have added library and compiler devs so as to be able to do more implementation work in parallel. When you extrapolate, note that features on the right hand side of the roadmap are 'generally' smaller... however I agree that one thing this roadmap is going to let you do going forward is track our velocity as we deliver against the roadmap. I hope to have more data and details known and shareable at GoingNative in September.

  • Anonymous
    June 30, 2013
    The comment has been removed

  • Anonymous
    June 30, 2013
    As far as I can tell, this means that plenty of features won't make it in, even to a Service Pack. Are you aware GCC and CLang have both reached Feature Complete? I think MS seem to have given up on remaining competitive with their C++. Now I just need to work out how to embed CLang in the Visual Studio IDE successfully and I can start using C++ 11 right now. After the debacle of promised updates to C++ in VS2012, I just don't trust MS to deliver on C++ anymore.

  • Anonymous
    June 30, 2013
    @Herb If you want to avoid problems from breaking chamges then just implement profiles like .net profiles (target framework). But of course you won't do this, because of lost profits. VS team is very arogant, and show his arogance every time, now and in the past (all caps, idiotic colors, lack VS express for desktop, C++ for XP, etc) Releasing VS 2013 is HUGE MISTAKE. Nothing is ready for REAL release. New .NET not ready, C#/Roslyn not ready, C++ not ready, Features like 64bit edit and continue or async debug are JUST FIXES. You are selling unfinished (and buggy) product and want to pay another money for finishing missing/broken features. You should cancel VS 2013 and release this as VS 2012.4 Update. By this way, sales of VS 2012 will INCREASE, and you save lot of problems with new version of VS (install, configuration, extensions lack/compatibility, tools compatibility, etc). VS is simply too big and to heavy for annual release.

  • Anonymous
    June 30, 2013
    Seriously? You don't plan to ship a c++11 compatible compiler any time soon. But you do have time to put in a propitiatory async extension to the language?

  • Anonymous
    July 01, 2013
    The comment has been removed

  • Anonymous
    July 01, 2013
    Arkadiy Shapkin: Yes, 2013 Preview fully supports N3276 decltype. It's a long story: As requested by Boost, we attempted to implement N3276 in 2012 Beta. We thought we had gotten it right, but nobody from Boost tested the beta. Eventually, they discovered that one scenario didn't work, preventing result_of from being powered by decltype, and reported it after 2012 RTM was released. This has been fixed in 2013 Preview.

  • Anonymous
    July 02, 2013
    This VC++ 2012 bug still exist in VC++ 2013 svn.boost.org/.../81027 Without this workaround compiler return this error http://pastebin.com/HQH9AV1a

  • Anonymous
    July 03, 2013
    That is great for all c++ developers but at the same time a bit sad as we would have to wait more for the complete feature set.

  • Anonymous
    July 16, 2013
    @Herb Our project realy needs the alignment(alignof and alighas) to be implemented. The existing extension gave no replacement for it. a kind of code is like the following: // Pseudo code only: struct STD_Lay_MyTag { char marker; // Lead-in member-variables. // ...;  // Other lead-in member-variables. BYTE aObjMem[sizeof(_TplArg_Type)]; // memory to store a _TplArg_Type object with placement-new operator. STD_Lay_MyTag(); // Do something and then complete the initialization of the aObjMem. ~STD_Lay_MyTag();// Destroy the object in aObjMem. }; Assuming we can't simply use a _TplArg_Type as the member of STD_Lay_MyTag for some reason. The problem is we won't know about the alignment information of the _TplArg_Type for sure, For example, _TplArg_Type  can be a template parameter of a template. Moreover, Alignment of the STD_Lay_MyTag itself is also needed to suit to align the _TplArg_Type object and all other members in it. Now we need this: struct STD_Lay_MyTag { char marker; // Lead-in member-variables. // ...; alignas(_TplArg_Type) BYTE aObjMem[sizeof(_TplArg_Type)]; }; with the existing extension, the only thing we can do is(If the _TplArg_Type is INT32): struct STD_Lay_MyTag { char marker; // Lead-in member-variables. // ...; __declspec(align(4)) BYTE aObjMem[sizeof(INT32)]; }; However the following code is not supported because the __declspec(align(#)) and __alignof is only precompiling specifications which leads to the compiling error: struct STD_Lay_MyTag { char marker; // Lead-in member-variables. // ...; __declspec(align(__alignof(_TplArg_Type))) BYTE aObjMem[sizeof(_TplArg_Type)];// align(#) can't accept any symbols than number. }; Using the union is also impossible because the _TplArg_Type may be a non-trivial UDT. For now, We have no choice but to keep the codes that needs such specifications in ill-formed temporarily.

  • Anonymous
    July 19, 2013
    Frustrating. It's IE all over again. By the time you catch up, will anyone care?

  • Anonymous
    July 28, 2013
    nice to read something on c++ after long time

  • Anonymous
    September 04, 2013
    You just made my day! "the RTM version will also include a few tactical C99 language extensions when compiling C code, so that some popular community libraries (including FFmpeg) will now be able to compile with Visual C++ 2013."

  • Anonymous
    October 21, 2013
    Will the C99 stuff be available when building in C mode, i.e. without requiring the usual "ifdef" and "extern" noise? What about C99 support for the "inline" specifier?

  • Anonymous
    October 22, 2013
    @Craig: The four C features are available when compiling as C code, yes. We have no specific plans for additional C conformance features such as inline, but will continue to consider them on a case by case basis.

  • Anonymous
    December 06, 2013
    Maybe I'm missing something, but I just downloaded Visual Studio Express 2013 about an hour ago (December 6, 2013), tried to compile a simple C program, and it choked on a mid-block variable declaration, so it appears that either this C compiler is still 14 years out of date, or else I need to somehow enable this feature explicitly? Please note that I am now, always have been, and always will be a C programmer. Any reply that even briefly mentions that other language whose name I will not speak (it involves an increment operator) will not be an acceptable answer to my problem.

  • Anonymous
    December 06, 2013
    @Lee Daniel Crocker Hi Lee, can you give me an example of the code that failed to compile?

  • Anonymous
    December 06, 2013
    @Lee (When you compile C code, make sure the source file has a ".c" extension or use the /TP compiler switch.)