ReSharper C++ 2024.3 Starts its Early Access Program! 

The Early Access Program for ReSharper C++ 2024.3 has just begun!

Move to Folder

The Move to Folder refactoring now also handles C++ files (RSCPP-17126). After moving selected files to the new location, the refactoring will update the #include directives that reference the moved files.

Language support

ReSharper now supports the following new language features:

  • The C23 typeof and typeof_unqual operators.
  • The C++17 std::has_unique_object_representations type trait (RSCPP-21213).

We’ve also improved compatibility with C++ toolchains other than MSVC, adding support for additional compiler builtins (RSCPP-35949), GNU switch case ranges (RSCPP-32242), and named variadic macro parameters (RSCPP-32244).

Ranges

ReSharper 2024.3 contains a number of improvements for users of the C++20 ranges library. Among other changes, there are new context actions to convert range adaptor usages between pipe and call forms (RSCPP-31950) and more readable overloading errors for range adaptors using the pipe form (RSCPP-31951).

Code formatter and typing assists

  • In addition to the // @formatter:off/on comments, the code formatter can now be also disabled and enabled with the // clang-format off/on comments for improved interoperability with clang-format (RSCPP-31142).
  • Typing assist automatically inserts a space between control flow keywords (for/if/while/switch/catch) and the opening parenthesis if the corresponding formatter option is enabled (RSCPP-36073).
  • A new formatter setting controls line breaks between a declaration and a function try block (RSCPP-36065).

XML documentation comments

When using the builtin documentation comment template, you can now customize the template to use XML documentation instead of Doxygen with a new code generation setting (RSCPP-35911). Furthermore, ReSharper C++ now recognizes XML documentation inside /**...*/ comments in addition to ///... comments (RSCPP-21171).

Unreal Engine support 

ReSharper 2024.3 provides built-in live templates to generate UE_LOG and UE_LOGFMT logging statements in Unreal Engine solutions (RSCPP-33572). These live templates let you quickly choose the desired log category and the verbosity level from a list of available values. As usual, you can further customize these templates in Templates Explorer.

Generate code

Previously, when generating an overriding function with Generate or generative completion, ReSharper C++ omitted default function arguments. The main reason for this was to avoid situations where default arguments differ between a base function and an overrider (see the C.140 C++ core guideline for more details).

However, in some codebases with deep object hierarchies like Unreal Engine, the convention is to duplicate default arguments in overriding functions. The new Keep default arguments when generating an overriding function setting in code generation settings lets you control whether you prefer to preserve default arguments (RSCPP-36063).

Code Analysis

We’ve updated the Can be replaced with structured bindings inspection to be less noisy. ReSharper C++ 2024.3 does not show this inspection for cases when the replacement would have more than two structured bindings and not all of them would be used. If you still want to replace a declaration with structured bindings, you can use the corresponding Convert to structured bindings context action (RSCPP-35509).

That’s it for the first installment of the Early Access Program for ReSharper C++ 2024.3! For the full list of changes introduced in this build, please refer to our issue tracker.

image description