What’s New for Visual C++ Developers in VS2013 Preview

What’s New for Visual C++ Developers in VS2013 Preview

Rate This
  • Comments 46

Since the newer Visual C++ content is not yet live on MSDN, I copied the key bits from the "What's New for Visual C++ Developers" and replicated it below. Note that this post may be removed after the MSDN content has been available for a few weeks.

Thanks for your patience!

Improved ISO C/C++ Standards Support

Compiler

  • Supports the following ISO C++11 language features:
    • Default template arguments for function templates.
    • Delegating constructors.
    • Explicit conversion operators.
    • Initializer lists and uniform initialization.
    • Raw string literals.
    • Variadic templates.
  • rvalue/lvalue Reference Casts. With rvalue references, C++11 can clearly distinguish between lvalues and rvalues.  Previously. the Visual C++ compiler did not provide this in specific casting scenarios. A new compiler option, /Zc:rvalueCast, has been added to make the compiler conformant with the C++ Language Working Paper(see section 5.4, [expr.cast]/1).

The default behavior when this option is not specified is the same as in Visual Studio 2012.

C99 Libraries

  • C99 functionality added to <math.h>.
  • Complex math functions in new header, <complex.h>.
  • Integer type support in new header, <inttypes.h>; includes format string support for "hh".
  • Support for variable argument scanf forms in <stdio.h>. C99 variants of vscanf, strtoll, vwscanf/wcstoll, isblank/iswblank implemented.
  • New conversion support for long long and long double in <stdlib.h>.

Standard Template Library 

  • Support for the C++11 explicit conversion operators, initializer lists, scoped enums, and variadic templates.
  • All containers now support the C++11 fine-grained element requirements.
  • Support for these C++14 features:
    • "Transparent operator functors" less<>, greater<>, plus<>, multiplies<>, and so on.
    • make_unique<T>(args...) and make_unique<T[]>(n)
    • cbegin()/cend(), rbegin()/rend(), and crbegin()/crend() non-member functions.
  • <atomic> received numerous performance enhancements.
  • <type_traits> received major stabilization and code fixes.

Visual C++ Library Enhancements

  • C++ REST SDK is added. It has a modern C++ implementation of REST services. For more information, see C++ REST SDK.
  • C++ AMP Texture support is enhanced. It now includes support for mipmaps and new sampling modes.
  • PPL tasks support multiple scheduling technologies and asynchronous debugging. New APIs enable the creation of PPL tasks for both normal results and exception conditions.

C++ Application Performance

  • Auto-Vectorizer now recognizes and optimizes more C++ patterns to make your code run faster.
  • ARM platform and Atom micro-architecture code quality improvements.
  • __vectorcall calling convention is added. Pass vector type arguments by using the __vectorcall calling convention to use vector registers.
  • New Linker Options. The /Gw (compiler) and /Gy (assembler) switches enable linker optimizations to produce leaner binaries.
  • C++ AMP shared memory support to reduce or eliminate data copying between CPU and GPU.
  • Profile Guided Optimization (PGO) enhancements:
    • Performance improvements from a reduction in the working set of apps that are optimized by using PGO.
    • New PGO for Windows Store app development.

Windows Store App Development Support

  • Support For Boxed Types In Value structs. You can now define value types by using fields that can be null—for example, IBox<int>^ as opposed to int. This means that the fields can either have a value, or be equal to nullptr.
  • Richer Exception Information. C++/CX supports the new Windows error model that enables the capture and propagation of rich exception information across the application binary interface (ABI); this includes call stacks and custom message strings.
  • Object::ToString() Is Now Virtual. You can now override ToString in user-defined Windows Runtime ref types.
  • Support For Deprecated APIs. Public Windows Runtime APIs can now be marked as deprecated and given a custom message that appears as a build warning and can provide migration guidance.
  • Debugger Improvements. Support for native/JavaScript interop debugging, Windows Runtime exception diagnosis, and async code debugging (both Windows Runtime and PPL).

Diagnostics Enhancements

  • Debugger Improvements. Support for async debugging and Just My Code debugging.
  • Code Analysis Categories. You can now view categorized output from the Code Analyzer to help you find and fix code defects.
  • XAML Diagnostics. You can now diagnose UI-responsiveness and battery-usage issues in your XAML.
  • Graphics and GPU Debugging Improvements.
    • Remote capture and playback on real devices.
    • Simultaneous C++ AMP and CPU debugging.
    • Improved C++ AMP runtime diagnostics.
    • HLSL Compute shader trace debugging.

3-D Graphics Enhancements

  • Image Content Pipeline support for pre-multiplied alpha DDS format.
  • Image Editor uses internally pre-multiplied alpha for rendering, and thereby avoids rendering artifacts such as dark halos.
  • Image and Model Editors. User-defined filter creation is now supported in Shader Designer in Image Editor and Model Editor.

IDE and Productivity

The Visual Studio IDE has significant improvements to help you be more productive when you code in C++.

  • Improved Code Formatting. You can apply more formatting settings to your C++ code. By using these settings, you can control new-line placement of braces and keywords, indentation, spacing, and line wrapping. Code is automatically formatted when you complete statements and blocks, and when you paste code into a file. To modify formatting settings, on the menu bar in Visual Studio, choose Tools, Options, expand the Text Editor, C/C++, and Formatting nodes, and then make your changes. You can also use the Quick Launch box to access these options.
  • Brace Completion. C++ code now auto-completes the closing characters that correspond to these opening characters:
    • { (curly brace)
    • [ (square bracket)
    • ( (parentheses)
    • ' (single quote)
    • " (double quote)
  • Additional C++ Auto-completion Features.
    • Adds semicolon for class types.
    • Completes parentheses for raw string literals.
    • Completes multi-line comments (/* */)
  • Find All References now automatically resolves and filters references in the background after it displays the list of textual matches. To disable reference resolution, on the menu bar in Visual Studio, choose Tools, Options, expand the Text Editor, C/C++, and Advanced nodes, and change the Disable Resolving setting under References.

To modify the brace-completion settings, on the menu bar in Visual Studio, choose Tools, Options, expand the Text Editor, C/C++, and General nodes, and then make your changes. You can also change the settings for all Visual Studio languages by expanding the Text Editor, All Languages, and General nodes.

To modify specific C++ settings, on the menu bar, choose Tools, Options, expand the Text Editor, C/C++, and Advanced nodes, and then make your changes.

  • Context-Based Member List Filtering. Inaccessible members are filtered out of the IntelliSense member lists. For example, private members are not displayed in the member list unless you are modifying the code that implements the type. While the member list is open, you can press Ctrl+J to remove one level of filtering (applies only to the current member list window). You can press Ctrl+J again to remove the textual filtering and show every member.
  • Parameter Help Scrolling. The displayed function signature in the parameter-help tooltip now changes based on the number of parameters you've actually typed, rather than just showing an arbitrary signature and not updating it based on the current context. Parameter help also functions correctly when it's displayed on nested functions.
  • Toggle Header/Code File. You can now toggle between a header and its corresponding code file by using a command on the shortcut menu, or a keyboard shortcut.
  • Resizable C++ Project Properties Window.
  • Auto-generation of Event Handler Code in C++/CX and C++/CLI. When you are typing code to add an event handler in a C++/CX or C++/CLI code file, the editor can automatically generate the delegate instance and event-handler definition. A tooltip window appears when event-handler code can be auto-generated.
  • DPI Awareness Enhancement. The DPI Awareness setting for application manifest files now supports the "Per Monitor High DPI Aware" setting.
  • Faster Configuration Switching. For large applications, switching configurations—especially subsequent switching operations—execute much more quickly.
  • Build Time Efficiency -- faster builds. Numerous optimizations and multi-core utilization make builds faster, especially for large projects. Incremental builds for C++ applications that have references to C++ WinMD are also much faster.
  • will more c++11 added in the future or we must wait for another VS release?

  • Nothing yet about cost for vs2013 which is making me nervous. We've only just bought vs2012 professional. I don't really want to have to go to my boss and explain that we now need to purchase another version of devstudio for a few additional C++ features which we thought would be added to vs2012!

  • > Resizable C++ Project Properties Window.

    Finally.

  • I'm thankful for any new C++11 mercies we can get. The template stuff is nice for library code and all. But seriously, how hard can implicitly-defined default move ctor & assignment functions really be? I die a little inside every single day I have to write out totally redundant move ctors & assignment operators by hand. That's code that's cumbersome to maintain, thrice the length any sensible person would expect it to be and bound to be overseen when new class members are added, thus expiring and breaking unnoticedly every other month.

    Even worse, everyone else will suffer severe pain once they realize their manually written and carefully maintained move ctors & assignment operators in fact break implicitly-defined copy functionality when the copiler finally gets round to implementing sensible copy/move member function generation rules as specified by C++11 *. Right now, you're not only lagging behind C++11, you're making it worse just by leaving out some seemingly trivial functionality. I hope you can fix that till RTM, you will have my eternal gratitude for it!

    * If the class definition declares a move constructor or move assignment operator, the implicitly declared copy constructor is defined as deleted.

  • Can Microsoft just announce EOL for MFC if we're not going to see significant updates to it ever again? I feel a proper announcement would go a long way to getting organisations off of it

  • does chrono uses high definition performance timer in this release?

  • @CodingCat +1 for adding "implicitly-defined default move ctor & assignment functions". As I understand (maybe wrongly) these would require "noexcept" to also be implemented in VS2012/13

    On my personal "wants list" I really would like "defaulted and deleted Functions", "non-static data member initializers" and "constexpr" to be added.

  • > Improved ISO C/C++ Standards Support

    I'm glad I didn't buy 2012.  I would be seriously pissed off right now. I mean you DID said you would do out of band compiler updates (no, buggy CTP doesn't count).

    > C99 Libraries

    > Resizable C++ Project Properties Window.

    It's so embarrassing that those were missing for such a long time that I feel weird to be happy about it. But I am.

    > Brace Completion

    > Toggle Header/Code File

    Finally! Just 5 to 10 more releases like this and I won't have to buy VisualAssistX to be able to work with C++

  • Only additions I really want for MFC/ATL is that move constructors/operators to be added to CString and some other data classes.

  • Still no non-static member initializers? Shame on you! :p

  • @All, thanks for the feedback.

    About conformance, for more forward-looking information please catch Herb Sutter and "The Future of C++" at Build. It will be available as a live stream on Friday. See channel9.msdn.com/.../2-306 for more details.

  • Nothing new in UI development for native apps. Go Figure.

  • Looking forward to Herb's build session.

    The Visual C++ Team really needs to focus faster on c++11 compliance.

    clang and gcc are already fully compliant, authoritative c++ 11 books are finally there.

    It is high time for us to be able to use c++ 11.

  • I think that the Visual C++ team starts focussing on C++14 now. We already have a pretty good idea of what will be in and that way we don't have another wait to catch up in 2 years

  • @STL (hoping he reads this): Is there any reason that std::mutex uses windows Mutexes, instead of the more efficient CRITICAL_SECTION API?  Is there some feature of std::mutex that CRITICAL_SECTION doesn't support?

Page 1 of 4 (46 items) 1234