September 10th, 2025
like5 reactions

C++ Language Updates in MSVC Build Tools v14.50

Cameron DaCamara
Principal Software Engineer

C++ Language Updates in MSVC Build Tools v14.50

It has been some time since we have provided an update on MSVC progress, and this one comes with the latest major update to our IDE: Visual Studio 2026 version 18.0. This version of Visual Studio ships with the MSVC Build Tools version 14.50, which includes version 19.50 of the MSVC compiler. You can try out the improvements by downloading the Insiders release. Also, if you want to track updates in the Standard Library, check out the STL Changelog, which is regularly updated. Let’s jump right into the updates!

C++23 Features

As C++ standards progress in MSVC, you can follow along using the cppreference compiler support table and help us identify what we should be working on next!

  • P0849R8 (auto(x): decay-copy in the language)
// Prior to P0849R8:
void pop_front_alike(auto& x) {
    using T = std::decay_t<decltype(x.front())>;
    std::erase(x, T(x.front()));
}

// After P0849R8:
void pop_front_alike(auto& x) {
    std::erase(x, auto(x.front()));
}
// Valid prior to C++23.
#error bad configuration...
// Valid after C++23.
#warning configuration deprecated...
  • CWG Issue 2586 (Explicit object parameter for assignment and comparison)
struct S {
  S& operator=(this S&, const S&) = default; // Valid after CWG2586.
  auto operator<=>(this const S&, const S&) = default; // Valid after CWG2586.
};
  • P2280R4, allowing references to unknown values during constant evaluation
template <typename T, size_t N>
constexpr size_t array_size(T (&)[N]) {
    return N;
}

void check(int const (&param)[3]) {
    constexpr auto s2 = array_size(param); // Previously ill-formed, now accepted as a constant expression after P2280R4.
}

Smaller Conformance Updates

    • CWG2635 – Constrained structured bindings.
    • CWG2465 (Coroutine parameters passed to a promise constructor)
    • P2360R0 which extends the definition of an init-statement to allow an alias-declaration
    • CWG2496 – ref-qualifiers and virtual overriding.
    • CWG2506: Structured bindings and array cv-qualifiers.
    • CWG2507 (default arguments for operator[]).
    • CWG2585: No change required to behavior.
    • P2290R3 C++23 Hex/oct delimited escape sequence support in string literals.
    • CWG2521 which deprecates ‘operator string-literal identifier’.
    • CWG2528 which relaxes conversion rules for the spaceship operator.
    • P2797R0: Proposed resolution for CWG2692 Static and explicit object member functions with the same parameter-type-lists.
    • P2266R3 Simpler implicit move.
  • Implement a warning to notify of the enum type change caused by /Zc:enumTypes.

Compiler Improvements in v14.50

C++/CLI

Diagnostics

constexpr

C++ Modules

Conformance

Reliability

Correctness

Correctness (C compiler)

Closing

As always, we welcome your feedback. Feel free to send any comments through e-mail at visualcpp@microsoft.com, through Twitter @visualc, or through BlueSky @msftcpp.bsky.social. Also, feel free to follow Cameron DaCamara on Twitter @starfreakclone.

If you encounter other problems with MSVC in Visual Studio 2026 please let us know via the Report a Problem option, either from the installer or the Visual Studio IDE itself. For suggestions or bug reports, let us know through Developer Community.

 

Author

Cameron DaCamara
Principal Software Engineer

Principal Software Engineer, MSVC compiler front-end team at Microsoft.

6 comments

Sort by :
  • Jean Gautier

    Is there a way to benefit from v145 toolset with cmake?
    It seems only v143 is visible to cmake (latest cmake version 4.1.1).
    Thanks

    • Fady al Dhaim

      i’m on cmake 4.0.2 and it recognized the v145 toolset just fine, in fact the same codebase that couldn’t compile on v143, compiled successfully on v145, the compiler was choking on type ids across modules where it yields an internal compiler error.

  • David Hunter

    Is there an upgrade tool to upgrade all the vcxproj files in a solution?
    I think this just means changing the platform toolset from v143 to v145 but there may be more?

    • Augustin PopaMicrosoft employee

      We will also be shipping a new upgrade experience as part of 18.0. It isn’t yet available as of the first Insiders release.

    • David Hunter

      I did discover a way to do this. Go to the “Property Manager” tab. There you select all projects. Then right click and open the “Properties” sheet.
      There you can change the “Platform Toolset” which changes it for all projects. Save and you are done

    • Frank Schmitt

      Use a property sheet included in every project to centrally manage this.