ReSharper C++ Early Access Program
We thought that C++ developers were seriously missing out, so we decided to get to work on C++ support in Visual Studio as part of a future version of ReSharper.
Some of the features for C++ that we've already implemented in ReSharper include the following:
- Context-insensitive navigation including Go to Type, Go to Symbol, Go to File Member and Go to Everything.
- Context-sensitive navigation including Go to Declaration, Go to Derived Symbols, Go to Implementation and Go to Base Symbols — everything that's usually available via ReSharper's Navigate To menu.
- Find Usages of C++ code symbols with preview, filtering and grouping in the list of found occurrences.
- Introduce Variable and Rename refactorings.
- Context actions to transform macro calls, auto-insert #include directives, create local and global variables, enums, class members or functions from usage, initialize fields from constructor parameters and remove redundant parentheses.
- Thorough understanding of C++ templates to correctly resolve different template specializations and navigate between them.
- Code generation to quickly create a constructor, add missing members, overrides or implementations and support for Live and Surround templates.
- ReSharper with C++ support is provided as a part of Early Access Program, which means that we can't guarantee that builds will even run.
- C++ is a complicated language to support, and significant parts of the C++ language ecosystem are not yet supported. See below for details on the extent of support for language versions, libraries and extensions. Please examine the limitations carefully before deciding whether to proceed with downloading and installing an EAP build.
What is supported?
- C, C++03 and a part of C++11.
- Code bases up to 40 Mb.
- Most Boost libraries.
What is partially supported?
- C++11 lambda expressions.
- The following MS C++ extensions:
- __uuidof keyword
- __pragma keyword
What is not supported?
- Code bases exceeding 40 Mb: significant performance issues are expected.
- Microsoft libraries including MFC, ATL and WTL.
- A set of C++11 features including constexpr expressions
- The following MS preprocessor extensions:
- #import preprocessor directive
- #pragma push_macro/pop_macro directive
- Charizing operator (#@)
- The following MS C++ extensions:
- C++ component extensions
- C++ CLI extensions
- A new line immediately preceded by a backslash inside identifiers, keywords and numeric literals
- __identifier keyword
- _if_exists/_if_not_exists statement
- Based pointers
- Event handling in native C++
- __super keyword
- Microsoft C++ implementation of name resolution in templates
What known issues are there?
- In Visual Studio 2013 there can be red code as Standard Template Library uses unsupported C++11 features.
- Find Usages and Rename do not handle references in dependent code.
- Files that belong to multiple projects are not highlighted and might be handled incorrectly.
- Search for conflicts during rename of non-local symbols is not implemented.
- "Fonts & Colors" settings might not appear in Visual Studio after installation (although there's a workaround).
- For a better experience with ReSharper C++ EAP we recommend disabling Visual Studio native C++ support. In order to do this please go to Tools | Options | Text Editor | C/C++ | Advanced | Browsing/Navigation and set Disable Database to True.
Upon examining the limitations above, please use your own judgment whether or not to download and install an EAP build, based on the specifics of C++ usage in your solution.
- Build number: 126.96.36.19993
- Date published: June 27, 2014
- Build highlights:
- Improvements in C++11 scope: support for trailing return types and variadic templates
- Enhanced code completion including smart completion
- Performance optimizations: indexes are saved in the local cache, meaning that subsequent launches are faster than the initial launch
- More settings to customize code formatting style
- New control flow analyses that detect unreachable code, unitialized local variable, assigned value that is never used and redundant else keyword
- New quick-fixes including Create from usage for global variables, class and enum members
- 150+ bug fixes compared to the previous build
What if the build doesn't work?
If your C++ code base uses language features, libraries and extensions that are defined as "partially supported" or "not supported" above, then the EAP simply isn't supposed to work. The best solution is to uninstall your EAP build and wait for updates on support of a specific technology as we go further developing the product.
If you feel that your code base is within the boundaries of supported features outlined above, then you can report problems and suggest improvements using our issue tracker. If your build considerably hinders performance of Visual Studio, please provide a performance snapshot (following the instructions under step 7) to the development team to investigate.