Visual Studio "14" Sharpens Focus on Modern C++
The first preview of Visual Studio “14” included details on the next layer of C++ 11/14 compliance that will be included. Now Senior Microsoft Developer Stephen T. Lavavej has brought additional details on the level of C++14 support in “14”.
This work is specific to changes made since VS2013RTM, and covers three major categories: Standard Template Library (STL) additions, STL fixes, and STL breaking changes. It is worth noting that according Lavavej, the work done on the C++ STL in “14” is primarily done by 4 developers: Lavavej, P.J. Plauger, Artur Laksberg, and James McNellis.
The additions to STL support in “14” are all based on approved C++14 specifications as well as one Technical Specification (Filesystem “V3”):
- N3642 <chrono>/<string> UDLs
- N3644 Null Forward Iterators
- N3654 quoted()
- N3657 Heterogeneous Associative Lookup
- N3658 integer_sequence
- N3668 exchange()
- N3670 get<T>()
- N3671 Dual-Range equal()/is_permutation()/mismatch()
- N3779 <complex> UDLs
- N3887 tuple_element_t
- N3940 Filesystem "V3" Technical Specification
These are complemented by several (well over a dozen) Library Issue Resolutions that are also part of C++14. Several fixes to “14”’s existing STL are incorporated: Clock support in
<chrono> has been improved,
<atomic> has improved compile time correctness (and no longer contains inline X86 assembly), and a long standing bug (since 2006) in
<locale> has been fixed among several other improvements.
Generated object files are more efficient, and are typically much smaller than the equivalent output of VS2013. Various improvements have been made in regex support to fix bugs and provide a more stable implementation.
gets() should note that it has been removed from C++11 and C++14, so for Visual Studio
gets() will be provided by the
<stdio.h> in the CRT, and
gets() will not be in the STL’s
With all of the changes, Lavavej notes that there are areas where backwards compatibility has been broken. The areas affected include the changes brought about by Filesystem’s V3 interface (as compared to V2), and the use of
_USE_32_BIT_TIME_T will trigger compiler warnings. There remains a known bug in
iostreams with respect to how it parses floating-point numbers, and this remains under development.
Readers looking for full details should be sure to check out Lavavej’s post.
Todd Montgomery Dec 19, 2014