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 variables 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:
- Variadic templates
- constexpr expressions
- Trailing return types
- 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.
- Indexes are built on every Visual Studio launch, meaning that subsequent launches are not currently faster than the initial launch.
- 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).
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: 22.214.171.12485
- Date published: April 21, 2014
- Build highlights:
- Improvements in C++11 scope: support for raw string literals, initializer lists and alias declarations
- Per-file compiler options support
- New intentions and quick-fixes including Move method implementation to out of class scope and Create declaration by definition
- Several new code inspections: for locating redundant access specifiers and explicit specifiers, for checking whether there are missing template and typename keywords on dependent entities, and to prevent using '0' literal as nullptr
- Inspection that checks for using polymorphic classes with non-virtual destructor with a corresponding quick-fix
- Highlighting for paired #if/#ifdef/#endif
- 90+ 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.