C++11/14/17 Features in Visual Studio 2015

Stephan T. Lavavej has posted a list of C++11, C++14, and C++17 features in Visual Studio 2015. Overall, the support looks pretty good and clearly the compiler team is rapidly evolving the product to improve standards conformance with each release. Not only are they tracking C++11 and C++14 standards well, they are proactively tracking C++17-to-be features as well. To summarize:

The Core Language

  • C++11 core language features are complete, except for: expression SFINAE and C99 preprocessor support is partial
  • C++14 core language features are complete, except for: variable templates, extended constexpr, and non-static data member initializers for aggregates.
  • C++17-so-far core language features are complete, except for: terse static_assert, nested namespace definitions and fixing qualification conversions.

The Standard Library

  • The C99 Standard Library implementation is complete, except for tgmath.h (which is irrelevant in C++) and the CX_LIMITED_RANGE/FP_CONTRACT pragma macros.
  • The C++11 Standard Library implementation is complete.
  • The C++14 Standard Library implementation is complete, except for Expression SFINAE in result_of/std::function, plus 11 more Library Issues.
  • The C++17-so-far Standard Library implementation is complete, except for pair/tuple improvements and untimed shared_mutex, plus 10 Library Issues.

Please see the linked post for the full details. Stephan has linked every feature to either documentation or a standards proposal that explains it.

Visual Studio 2015

A couple of exciting things have been announced for C++ programmers with respect to Visual Studio. Visual Studio 2015 is currently available as an unsupported preview release.

Google Creating Rename Refactoring Tool

Google has issued a request for comments on a rename refactoring tool based on clang’s libtooling API. Their first iteration will:

  1. Provide a command-line tool which will semantically rename a symbol in a set of input files.
  2. Provide an API for performing a rename refactoring to allow integration into any development environment (Emacs, Vim, CodeMirror, etc.)

The tool will be released under the terms of the existing clang license and integrated into the clang source tree.