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.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.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).
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
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.
ReSharper C++ now highlights the
#warning diagnostic preprocessor directives according to their severity level:
We’ve improved the evaluation engine to support aggregate initialization of
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:
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
The Drive to Develop
Subscribe to Blog updates
Thanks, we've got you!
The ReSharper C++ 2023.3 EAP Is Now Open
Our 2023.3 Early Access Program is now open! Read our first EAP digest to discover the latest enhancements to ReSharper C++.
ReSharper C++ 2023.2 EAP: Introducing AI Assistant
Starting from this EAP build, ReSharper has its own integrated AI Assistant ready to chat in the dedicated tool window (ReSharper | AI Assistant).
ReSharper C++ 2023.2 EAP: Improvements for Navigation and Coding Assistance
The new EAP build is here with gutter marks for recursive calls, improvements for more intuitive code navigation, and support for the .cppm module interface file extension.