ReSharper C++
The Visual Studio Extension for C++ Development
ReSharper C++ 2023.2 EAP: Support for the C++23 Standard Library Modules
The new Early Access build is here with support for the C++23 standard library modules and C++20’s [[no_unique_address]]
attribute, new code formatter settings, and other updates. Read on for more details and check out the full list of issues we’ve fixed in this update.
You can download the EAP builds from our website or via the Toolbox App.
C++20 and C++23 updates
The C++23 standard library introduces two named modules: std
and std.compat
(P2465). You can now use import std
or import std.compat
to import the entire standard library instead of using a precompiled header or including specific headers for the parts of the standard library that you need. This way you’ll also get all the usual benefits associated with the C++20 modules, including much faster compilation time and the absence of hidden dependencies on the standard library internals.
In addition to shipping the source code for the std
and std.compat
modules in the standard library, Visual Studio 17.6 introduced a new setting that enables the automatic building of these modules when using the /std:c++latest
switch (Project Properties | C/C++ | Language | Build ISO C++23 Standard Library Modules). As of this EAP build, ReSharper C++ will correctly resolve import
directives for standard library modules and automatically build the necessary ones. This makes it much easier to experiment with modules and benefit from improved compilation time (depending on the size of your project, of course).
C++20 added char8_t
, a new fundamental, unsigned integral type that stores one UTF-8 code unit. The recently accepted paper P2513 allows the initialization of a char
or unsigned char
array with a UTF-8 string literal. Visual Studio has supported this proposal since the 17.4 release, and now ReSharper C++ supports it as well. Interestingly, this change has also been backported to C++20 as a defect report. Yes, the language standard can have bug-fix updates too!
We’ve also introduced support for the C++20’s new [[no_unique_address]]
attribute, which can be used instead of relying on the empty base class optimization. [[no_unique_address]]
indicates that a unique address is not required for a non-static data member of a class (P0840), allowing the compiler to lay out members of the class in a more efficient way. ReSharper C++ now takes [[no_unique_address]]
into account when calculating the size of an object.
Code analysis
ReSharper C++ now highlights the #error
and #warning
diagnostic preprocessor directives according to their severity level:
We’ve improved the evaluation engine to support aggregate initialization of constexpr
arrays.
This EAP build also brings a new compatibility inspection for forward declarations of C-style enums. Since the size of a C-style enum depends on its contents, the C++ standard forbids forward-declaring them without specifying the underlying type. MSVC, however, still accepts forward declarations like that, which can lead to non-portable code:
Code formatting
In this EAP build, we’ve improved the formatting for bit-field members. The options to align initializers and declaration names in columns now support bit-fields. We’ve also added two new formatter settings specifically for bit-fields:
- Spaces before and after the colon in bit-field declarations.
- Alignment of bit-field sizes in columns.
Finally, there is a new setting to turn off indentation in member initializer lists.
Among other noteworthy updates, the Safe Delete refactoring now handles conflicts in dependent code. And for Unreal Engine 5.1 projects, we’ve introduced support for the UE_INLINE_GENERATED_CPP_BY_NAME
macro, which lets you inline generated files into your module to improve compilation time. UE_INLINE_GENERATED_CPP_BY_NAME
is now correctly handled when ordering #include
directives, and it does not cause issues for the Rename refactoring.
That’s all for now! Please try out the new build and share your feedback with us. If you encounter any issues, don’t hesitate to report them to our issue tracker.
Your ReSharper C++ team
JetBrains
The Drive to Develop