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 add missing members, overrides or implementations and support for Live and Surround templates.
After months of sending out private builds to carefully selected recipients, we decided to provide public early builds of ReSharper with C++ support.
- 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:
- Raw string literals
- Alias declarations
- 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: 188.8.131.529
- Date published: February 25, 2014
- Build highlights:
- Several new context actions including "Remove Redundant Parentheses"
- Code generation options to quickly add missing members, overrides or implementations
- 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.