What’s New in ReSharper C++

ReSharper C++ 2022.2 is focused on quality improvements and Unreal Engine support. This release introduces Blueprint-specific inlay hints and inspections and significantly improves the indexing performance for Unreal Engine projects.

Download

Free 30-day trial available

Unreal Engine

ReSharper C++ introduces Blueprint-specific inlay hints and allows you to see the bigger picture behind your code:

  • Be aware of derived Blueprint classes and check out the list of all inheritors.
  • Spot that a UFunction has implementations in Blueprints and search for all such cases.
  • Quickly check the state of a UProperty, including whether it has been overridden and what value is set in the Blueprint file.

We’ve also introduced two inspections to let you know if there are inconsistencies between the Blueprint-specific function specifiers used in the code and the Blueprints themselves:

  • A UFunction with the BlueprintCallable function specifier is supposed to be used in a Blueprint, but no usages are found.
  • A UFunction with the BlueprintImplementableEvent function specifier is supposed to be implemented in a Blueprint, but no implementations are found.

We’ve significantly improved the indexing speed of Unreal Engine projects. As a result of caching of precompiled headers, ReSharper C++ now indexes your code base up to twice as fast as before.

This experimental performance boost is currently available for Visual Studio 2022 only.

ReSharper C++ now supports Spec tests from the Unreal Engine automation testing framework. If you have a set of tests defined in the Define method after the DEFINE_SPEC macro or the BEGIN_DEFINE_SPEC/END_DEFINE_SPEC macros, ReSharper C++ will successfully discover them. In the Unit Test Sessions window, you can review the results of the tests and rerun failed tests, all tests, or specific tests.

The code completion list now includes Widgets metadata specifiers.

ReSharper C++ now properly handles Unreal Engine containers in Emplace calls, bringing improved search and navigation features, parameter name hints, and warnings about invalid arguments.

If you are interested in a stand-alone cross-platform IDE for Unreal Engine development, consider Rider. Unreal Engine support in Rider and ReSharper C++ is aligned and you can expect the same improvements in the Rider 2022.2 update.

C++ support

We've improved the readability of error tooltips by adding syntax highlighting. The error highlighting range also became more precise. For example, when getting an aggregate initialization warning, you can now tell at a glance exactly which subobject caused an initialization failure.

Parameter name hints now support make- and emplace-like function calls.

We’ve updated the bundled Clang-Tidy binary to Clang 14, adding new checks from the latest LLVM release.

ReSharper C++ 2022.2 also brings updates for Boost tests and introduces support for the Public Include Directories and All Header Files are Public project properties.

Take a look at What's New in ReSharper to learn about the other changes introduced in this release. For example, you can now remove temporary files generated by ReSharper while it is working on your code (ReSharper | Options | Environment | Disk Cleanup).

Download

Free 30-day trial available

ReSharper C++ 2022.1

Unreal Engine

ReSharper C++ 2022.1 brings a brand new way to quickly consult the Unreal Engine documentation about the details of a class, symbol, or function. You can now click Read more in the Quick Documentation pop-up (Ctrl+Shift+F1) to open the corresponding page in your browser.

The Rename refactoring now handles the Unreal Engine interface classes better. When renaming interfaces, both the U and I classes will be renamed accordingly.

ReSharper C++ can now substitute the parameter names when you generate a member function signature from the Unreal Engine delegate.

You can now also generate such functions when the ThisClass typedef is used.

Here is a short overview of the most important Unreal-related fixes delivered in this version:

  • The Unreal Engine 5 built-in preprocessor macros are now supported in the .Build.cs and .Target.cs files.
  • ReSharper no longer suggests the recent C# features that are not applicable in the .Build.cs and .Target.cs files on Unreal Engine 4.
  • ReSharper C++ now reads the list of valid reflection specifiers directly from the version of Unreal Engine which is currently in use, so it only offers you applicable items in code completion and displays up-to-date documentation.
  • There are no more issues caused by the DOREPLIFETIME_WITH_PARAMS_FAST and MARK_PROPERTY_DIRTY_FROM_NAME push model macros – ReSharper C++ now is aware of entities generated by the replication system, such as ENetFields_Private enum.

Unit Testing

The Unreal Engine testing framework is now supported. ReSharper C++ discovers Unreal Engine unit tests and adds the corresponding action indicators next to each test in the editor to run or debug the test or the whole test suite. In the Unit Test Sessions window, you can review the results of the tests, and rerun failed, all, or specific tests.

The new version of the Catch2 unit test framework brings significant changes – it’s now split into multiple headers and has a statically compiled library as its distribution model. It means you now have to include several headers, but the compilation time is improved. So if you’d like to check out the updated Catch2 unit test framework, ReSharper C++ 2022.1 has full support to help you with it.

ReSharper C++ 2022.1 also includes updates for the latest releases of GoogleTest and doctest, as well as various unit testing fixes.

C++ support

ReSharper C++ is now better at handling implicit constructor calls, allowing you to find usages and navigate to the called constructor in more cases, including the following:

  • standard (make_unique/make_shared) and Unreal-specific (MakeShared/MakeUnique) smart pointer creation functions.
  • emplace-like container methods.
  • static_cast and c-style cast expressions.

ReSharper C++ now also shows you an overloading warning when an emplace-like function is called with incorrect arguments.

ReSharper C++ 2022.1 improves the multiline generation of boilerplate code for aggregate initialization using C++20 designated initializers. You can now invoke completion on the next line if you’d like to see each initializer on a new line.

Formatting

ReSharper C++ now treats the C++20 requires-expressions correctly, allowing you to configure spaces formatting via the Around ‘->’ in trailing return types option.

Use the new Line feed at the end of file option to control adding or removing a blank line from the end of files.

Take a look at What's New in ReSharper to learn about the other changes introduced in this release. For example, you can now autodetect syntax style settings for C# files.

ReSharper C++ 2021.3

Support for Visual Studio 2022

ReSharper C++ now supports the new Visual Studio 2022 release build, meaning you will have access to the same rich feature set you are used to using in other Visual Studio versions. Since Visual Studio 2022 is an x64 process, there is no longer a limit to the maximum amount of memory that can be allocated to it, and all the ReSharper С++ features work faster.

To work with ReSharper C++ in Visual Studio 2022, make sure that the VS2022 icon in the dotUltimate 2021.3 installer is selected.

C++20

You can use C++20 designated initializers to quickly generate boilerplate code for aggregate initialization (P0329). Just select the corresponding item from the completion list to insert designators for the data members, and then provide the initial values.

With the C++20 contains function, you can easily check whether an element exists in an associative container (P0458). A new inspection suggests replacing instances of find or count with the new contains member function.

The new standard brings convenient library functions for erasing elements that work for all standard containers (P1209). A dedicated inspection will let you know when an erase-remove idiom can be replaced with std::erase or std::erase_if.

Another new library addition is the smart pointer creation functions that perform default initialization (P1973). When you need to allocate an array of built-in types and then immediately initialize it, you can now apply a quick-fix to use make_shared_for_overwrite or make_unique_for_overwrite.

Unreal Engine

With ReSharper C++ 2021.3, you no longer need to switch to Unreal Editor to create a new class – all predefined templates for Unreal Engine classes are now available in the list of ReSharper file templates.

To create a new class, go to Solution Explorer and right-click on the preferred project folder to open the Add menu (or use Ctrl+Alt+Insert). After you choose an Unreal Engine template from the list and give your new class a name, ReSharper C++ will generate the header and source files with the template code in the proper folders depending on whether the folder is private or public.

ReSharper C++ now works correctly with the Unreal Engine Sparse Class Data system.

We’ve fixed an issue that would sometimes cause ReSharper to reindex source code when a solution was loading.

Code analysis

A new inspection marks redundant parentheses in lambdas with no parameters, since a parameter list is not required in such cases.

When an elaborated type specifier is used neither to declare a new class nor to refer to a previously declared but hidden class, ReSharper C++ will suggest removing the specifier.

A new inspection finds for loops that can be written in a more concise way as while loops. The accompanying quick-fix lets you quickly rewrite them.

User specializations of classes like std::hash or std::formatter are often wrapped in a standalone namespace. To make your code more readable, ReSharper C++ suggests using a qualified class name instead.

If you construct an object of an exception type but do not use it, ReSharper C++ now warns you and lets you quickly add the throw keyword.

The bundled Clang-Tidy has been updated to Clang 13, adding new checks from the latest LLVM release.

Coding assistance

The Quick Info tooltip now includes the evaluation results for constant expressions. You can use this feature to see what subexpressions of a failing static_assert expression evaluate to, or to check out the value of a sizeof or alignof operator.

In addition to the Document action (via the Alt+Enter menu or the Ctrl+/ shortcut), you can now generate a stub for a new documentation comment by typing /// before a function or another entity you want to document.

Navigation

The File Structure window now groups symbols with the same qualifier. This is especially useful in source files that contain a lot of out-of-class functions.

ReSharper C++ 2021.3 allows you to search for declarations in inactive code, where navigation was previously not available.

You can also now navigate from a goto statement to the corresponding label.

Change Signature

The Change Signature refactoring now lets you easily control the C++17 [[nodiscard]] attribute, which indicates that the function caller should use the function’s return value.

C support

ReSharper C++’s 2021.3 supports C11 _Generic expressions, which provide a mechanism for limited compile-time choices in C.

We’ve also introduced support for typeof – a GNU extension to the C language for referring to the type of an expression.

Take a look at What's New in ReSharper to learn about the other changes introduced in this release. For example, additional GitHub-related items in the Copy Code Reference pop-up make it easy to share links with people, and you can also add a custom URI template for non-GitHub repositories.