C++ Team Blog

C++ tutorials, C and C++ news, and information about Visual Studio, Visual Studio Code, and Vcpkg from the Microsoft C++ team.

Moving a project to C++ named Modules

There is a lot of hype (and perhaps restraint) to using modules in projects. The general blocker tends to be build support, but even with good build support there is a distinct lack of useful resources for practices around moving projects to using named modules (not just header units). In this blog we will take a small project I created, ...

New Static Analysis Rule for Bounds Checking

We have added a new experimental static analysis rule in Visual Studio 16.10 version Preview 3 - C26458, WARNING_PATH_SENSITIVE_USE_GSL_AT. The new warning is a more precise and less noisy version of warning C26446, WARNING_USE_GSL_AT. Both warnings analyse standard containers for unchecked element access and they both share the warning ...

Conditionally Trivial Special Member Functions

The C++ standards committee is currently focusing on adding features to the language which can simplify code. One small example of this in C++20 is conditionally trivial special member functions, which we added support for in Visual Studio 2019 version 16.8. Its benefit isn’t immediately obvious unless you’ve been deep down the rabbit hole...

GSL 3.0.0 Release

Update June 4th, 2020 - GSL version 3.1.0 has been released. Please see the latest release page for information regarding GSL 3.1.0. For all future updates, please see refer to the release page on GitHub.   GSL 3.0.0 Release Version 3.0.0 of Microsoft's implementation of the C++ Core Guidelines Support Library (GSL) is now available...

The Performance Benefits of Final Classes

The final specifier in C++ marks a class or virtual member function as one which cannot be derived from or overriden. For example, consider the following code:  If we attempt to write a new class which derives from `derived` then we get a compiler error:  The final specifier is useful for expressing to readers of the code that a ...

C++20’s Conditionally Explicit Constructors

explicit(bool) is a C++20 feature for simplifying the implementation of generic types and improving compile-time performance. In C++ it is common to write and use types which wrap objects of other types. std::pair and std::optional are two examples, but there are plenty of others in the standard library, Boost, and likely your own codebases...

Feedback usabilla icon