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.
  • @ta.speot.is, We have fixed a number of customer reported major bugs in MFC in this release. We will work on publishing a list of such issues. Are you currently using MFC or looking for enhancements, or have suggestions about it future, please feel free to contact me directly at aymans at Microsoft dot com

    Thanks,

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

    For us, this is the most painful aspect of modern Windows development in C++. The existing models for this are *really* starting to show their age.

    Always find myself wishing we had the native equivalent to WPF, which is just so much more flexible.

    It will probably never happen, but a guy can dream right?

  • This is a HUGE NEWS for me and many other fellow developers all around the world!

    Looking for the simplest of all "STDBOOL" C99 header. Please do it! :-)

    Thank you for caring about C99.  This is some 733t stuff. I knew that someday its going to happen.. and now I am a proud VS 2013 user.  Great job!

  • Great, now fix the UI. It's almost unusable (hence, I don't use it.)

  • Alessio T> will more c++11 added in the future or we must wait for another VS release?

    Herb's Build talk on Friday (like Eric said) and my upcoming VCBlog post (to be published shortly after) will answer this.

    Alessio T> does chrono uses high definition performance timer in this release?

    No, sorry. I'm aware of this bug and I know that it's bad, I just didn't have time to rewrite this code.

    Ben Craig> Is there any reason that std::mutex uses windows Mutexes, instead of the more efficient CRITICAL_SECTION API?

    Our std::mutex implementation is powered by the Concurrency Runtime (ConcRT), instead of the Windows API directly.

  • toggle header/code - this will be my favourite.

  • The MSDN version of this information is now live@

    msdn.microsoft.com/.../hh409293(v=vs.120).aspx

    Note this topic links off to others, including Breaking Changes, which you might find useful.

  • Absolutely mouthwatering, that's what the new C++ feature set is. Big thanks to all involved!

    Kudos.

    - Tom

  • Bullcrap.  No C99.  That "C99 libraries" thing is just C++ conformance; if they could take it away from C they probably would.

  • What about XP compatibility? Is it still there?

  • Half more of the compiler bugs in vs2012 have been fixed indeed and the C++11 in 2012 Nov CTP has also shown up now. cheeres!

    There is another half bugs needs to be fixed. For example:

    connect.microsoft.com/.../vc-2012-compiler-bug-in-optimized-builds

    Could you please fix these as soon as you release the RTM?

    @Alastair @CodingCat It needs the 'noexcept' being supported first because the exception-safe mechanism needs to work at first. It's important to make sure any parts of an object can be moved without exception thrown before uses move semantics to this object. In negative state the compiler has only one choice, which is to use the copy but not move to deal with the parts(even if it's slow). Comparison to the copy, improper move may corrupt the source objects.

  • Is this pragma added ?

    connect.microsoft.com/.../pragma-execution-character-set-utf-8-didnt-support-in-vc-2012

  • Tried the vs2013 C++11 but it really has major flaws. We have created TAOX11 which uses C++11 features heavily, can't compile any source file without getting some error :-(. Hopefully we don't need to wait for VS2014 to get some better support.

  • Is the __vectorcall calling convention available for 64-bit as well as 32-bit?

  • @Maxim Yudin, the answer is yes.

    Thanks,

Page 2 of 4 (46 items) 1234