ReSharper C++ Starts the 2023.2 Early Access Program
The ReSharper C++ 2023.2 Early Access Program starts today!
Give the free EAP builds a try and let us know what you think about the changes and improvements they introduce.
You can download the EAP builds from our website or via the Toolbox App.
Safe Delete refactoring
ReSharper C++ introduces the Safe Delete refactoring to let you remove symbols from the source code safely. Starting with this EAP build, the refactoring is available for deleting a class, function, variable, namespace, and even a concept.
“What makes this refactoring safe?” you might ask. The trick is that before deleting a symbol, ReSharper C++ searches for usages and lets you preview the results, so you can be sure that all the removals are intended. For example, if you try to delete a complex entity, like a class or namespace, ReSharper C++ will recursively check the usages for all its members.
To invoke the refactoring, place the caret on the item you want to delete and select Safe Delete from the Refactor This menu. Alternatively, choose ReSharper | Refactor | Safe Delete from the main menu, or use the corresponding shortcut (
Ctrl+R,D, depending on the shortcut scheme you use).
If you want to keep some code slated for removal, double-click on the usage in the list to navigate to the corresponding line and make the necessary adjustments. Once you’re happy with the list of usages to be removed, click Next to confirm your code deletion.
C++23’s if consteval
C++20 brought several new features related to constant evaluation, including
consteval (P1073) and
std::is_constant_evaluated() (P0595). As a quick recap, the
consteval keyword specifies a function that can be evaluated only during compile-time, while
std::is_constant_evaluated() is a library function that checks whether the current evaluation is a constant evaluation.
C++23 fixed some interaction issues for these features and further developed the idea by introducing the
if consteval statement (P1938). If the evaluation of this statement occurs during a constant evaluation, then the following compound statement is executed. Otherwise, the
else branch is executed.
In this EAP build, ReSharper C++ introduces support for
if consteval and brings new inspections to help you play around with recent language additions for constant evaluation:
consteval ifis always constant” warns you when the condition is always true in the immediate context.
std::is_constant_evaluatedwill always evaluate to constant” warns you when the function result is always true in a manifestly constant-evaluated expression.
ifcan be replaced by
if consteval” suggests a quick-fix to update your code in C++23 style.
Updates for C++20’s concepts support
With improved completion for dependent code, you will now get completion items when the type is restricted by concepts or traits. ReSharper C++ now considers the full variety of
std::is_base_of type traits, their
_v value-aliases, the corresponding
std::derived_from concepts, and the Unreal Engine
For more helpful code completion suggestions, ReSharper C++ now also extracts type and value requirements from a
if constexpr, and SFINAE, like
template <class T, class = std::enable_if_t<std::is_base_of<X, T>>> void foo(T arg);.
A new context action will help you move the template parameter constraint to a
There’s also a complementary context action to help you with the opposite update – converting a
requires-clause to a template parameter constraint:
Finally, all the usual ReSharper C++ inspections for unused entities now also work for templates and concepts.
ReSharper C++ 2023.1 introduced proper highlighting and formatting for macro substitution in the Quick Documentation popup and tooltips on hover. For consistency, starting with this EAP build, these improvements will also work for macro definitions themselves:
When you specify the parameter direction with the
[out] attribute of the Doxygen
param command, the tooltips now fetch them from your comment:
This EAP build adds a new inspection that detects redundant dereferencing and taking addresses. It offers you several quick-fixes to remove the redundancies:
.can be replaced with
->” and vice versa.
- “Taking address of dereferencing can be removed” and vice versa.
ReSharper C++ now supports the
/Zc:preprocessor compiler option, which enables preprocessor conformance mode.
We’ve also updated the bundled clang-tidy binary to Clang 16, providing new checks.
Those are the biggest highlights for this first EAP build. If you have any feature requests or encounter any issues, please submit them to our tracker. We are looking forward to your feedback!
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: Support for the C++23 Standard Library Modules
Support for C++23 standard library modules and C++20’s [[no_unique_address]] attribute, new code formatter settings, and other updates.