BT

Visual Studio "14" Sharpens Focus on Modern C++

by Jeff Martin on Jun 12, 2014 |

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.

Users of 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 <cstdio>.

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.

Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Tell us what you think

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread
Community comments

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Discuss

Educational Content

General Feedback
Bugs
Advertising
Editorial
InfoQ.com and all content copyright © 2006-2014 C4Media Inc. InfoQ.com hosted at Contegix, the best ISP we've ever worked with.
Privacy policy
BT