ReSharper C++ vs. Visual Assist X

This document describes how ReSharper C++ differs from Whole Tomato's Visual Assist X.

As both products are being actively developed and their functionality changes on a regular basis, we consider this comparison valid for specific releases that are indicated in the header of the comparison table.

If you discover any inaccurate items in this table, please post a comment below to let us know, and we'll update the table as soon as possible.

Visual Assist X in Visual Studio 2015 + Visual Assist X Build 2108
in Visual Studio 2015 + ReSharper C++ 2016.2

Supported Visual Studio Versions

Visual Studio 2015 Visual Studio 2015
Visual Studio 2013 Visual Studio 2013
Visual Studio 2012 Visual Studio 2012
Visual Studio 2010 Visual Studio 2010
Visual Studio 2008 Not supported
Visual Studio 2005 Not supported
Visual Studio .NET 2003 Not supported
Visual Studio .NET 2002 Not supported
Visual C++ 6.0 Not supported

Supported C/C++ Specifications

C/C++ C/C++
C++/CLI Not supported

Detection of Code Issues

Highlight mistyped symbols Highlight unresolved symbols
Spell-checking No matching functionality
Highlight mismatched delimiters No matching functionality
No matching functionality Parameter is never used
No matching functionality Declarator is only assigned but never accessed
No matching functionality Implicit conversion to incompatible pointer type
No matching functionality Implicit pointer to integer conversion
No matching functionality Static assertion failure
No matching functionality Local variable is never used, but may have side-effects in its destructor
No matching functionality Declarator is reassigned in all paths before being read
No matching functionality Keyword default is used as identifier
No matching functionality Static data member in an anonymous class is not allowed by the C++ standard
No matching functionality Unexpected syntax element
No matching functionality Redundant inline specifier
No matching functionality Redundant base class access specifier
No matching functionality Redundant static specifier on a member allocation/deallocation function
No matching functionality Redundant static specifier on an anonymous namespace member
No matching functionality Use auto
No matching functionality Guarded header has already been included
No matching functionality Redundant parentheses
No matching functionality Redundant empty declaration
No matching functionality Redundant empty statement
No matching functionality Redundant control flow jump statement
No matching functionality Redundant else keyword inside compound statement
No matching functionality Redundant else keyword
No matching functionality Unreachable code
No matching functionality Redundant template keyword
No matching functionality Redundant typename keyword
No matching functionality Access specifier does not affect any declaration
No matching functionality Access specifier does not change accessibility level
No matching functionality Qualifier is redundant
No matching functionality Unresolved reference in Doxygen comment
No matching functionality Syntax error in Doxygen comment
No matching functionality Missing include guard
No matching functionality Entity is deprecated
No matching functionality Slash symbol used in #include directive doesn't match code style settings
No matching functionality Too many arguments in a call to boost::format
No matching functionality Not enough arguments in a call to boost::format
No matching functionality Mixed serial and positional arguments for boost::format
No matching functionality Legacy format code for boost::format
No matching functionality Bad format code for boost::format
No matching functionality Too many arguments in a call to printf
No matching functionality Not enough arguments in a call to printf
No matching functionality Probably invalid printf format specifier
No matching functionality Invalid printf format specifier
No matching functionality Backslash and newline separated by space
No matching functionality Call to a virtual function inside a constructor/destructor will result in a pure virtual function call
No matching functionality Call to a virtual function inside a constructor/destructor will be statically resolved
No matching functionality Non-consistent resource acquisition-reclaim pair
No matching functionality Non-reclaimed resource acquisition
No matching functionality Non-safe resource acquisition
No matching functionality Implicit conversion to less qualified pointer type
No matching functionality Member function may be const
No matching functionality Adding cv-qualifiers to references has no effect
No matching functionality Using the result of an assignment as a condition
No matching functionality Mismatched class tags
No matching functionality Hiding local declaration
No matching functionality Declaration does not declare anything
No matching functionality Declaration specifier with no declarators
No matching functionality Declaration of a non-overriding virtual function in a final or sealed class
No matching functionality Declarator disambiguated as a function declaration
No matching functionality Possibly uninitialized class member
No matching functionality Possibly unintended object slicing
No matching functionality Expression which evaluates to zero is used as a null pointer constant
No matching functionality More than one implicit conversion applied during copy-initialization. This is non-standard Microsoft C++ extension
No matching functionality Binding r-value to l-value reference is non-standard Microsoft C++ extension
No matching functionality Casting from nullptr to pointer type with reinterpret_cast is non-standard Microsoft C++ extension
No matching functionality Class needs a user-defined constructor because of an uninitialized data member
No matching functionality Implicit default constructor is not available
No matching functionality Dependent template without template keyword
No matching functionality Dependent type without typename keyword
No matching functionality Possibly erroneous expression-statements without side-effects
No matching functionality Possibly erroneous empty-statements
No matching functionality Default case is not handled in a switch statement
No matching functionality Possibly erroneous incomplete switch-statement
No matching functionality Polymorphic class with non-virtual public destructor
No matching functionality Class member function hiding a non-virtual function from a base class
No matching functionality Non-virtual class member function hidden in a derived class
No matching functionality Function is not implemented
No matching functionality Non-inline function definition in a header file
No matching functionality Compile-time constant expression can be replaced with either true or false
No matching functionality Zero constant can be replaced with nullptr
No matching functionality Throw expression can be replaced with a rethrow expression
No matching functionality Member function may be static
No matching functionality Implicit integer to pointer conversion
No matching functionality Order of member initializers does not match the initialization order
No matching functionality Function returns by const value
No matching functionality Result of a postfix operator is discarded
No matching functionality Non-explicit conversion operator
No matching functionality Non-explicit converting constructor
No matching functionality C-style cast used instead of a C++ cast
No matching functionality Overriding function without override specifier
No matching functionality Constructor of smart pointer used instead of its make function
No matching functionality Redundant virtual specifier on an override function
No matching functionality Taking an address of class r-value is non-standard Microsoft C++ extension
No matching functionality Move operation without noexcept specification
No matching functionality Redundant argument in conditional expression
No matching functionality Union member of reference type
No matching functionality Explicit specialization in non-namespace scope
No matching functionality Default initialization of a const-qualified object of a type without a user-provided default constructor
No matching functionality Redeclaration of a template parameter from an outer scope
No matching functionality Use of an incomplete type inside a template
No matching functionality Uninitialized dependent base class
No matching functionality Reference class member with mutable specifier
No matching functionality Possibly unused #include directive
No matching functionality Assigned value is never used
No matching functionality Local variable used without being initialized
No matching functionality Local variable might not be initialized
No matching functionality Declarator is used only in unevaluated context
No matching functionality Declarator is never used
No matching functionality Parameter is always rewritten in function body before being read
No matching functionality Dereference operator limit is exceeded
No matching functionality No return statement in a function returning non-void
No matching functionality Not all control paths return a value
No matching functionality Parameter is always rewritten in function body before being read
No matching functionality Code inspections for most compiler errors and some warnings
No matching functionality Navigation between code issues
No matching functionality Asynchronous search for code issues in any scope

Quick-Fixes for Code Issues

Create from usage Create from usage
Add #include Import global variable, type, type definition, function, macro
Create declaration Create declaration
Repair case No matching functionality
No matching functionality Replace -> with . and vice versa
No matching functionality Initialize variable
No matching functionality Remove all unused #include directives in file
No matching functionality Change variable type to match assigned value
No matching functionality Fix function return type
No matching functionality Change smart pointer to make function
No matching functionality Rename wrong reference
No matching functionality Sort member initializers by the order of initialization
No matching functionality Remove unreachable code
No matching functionality Remove unused initializer
No matching functionality Remove redundant parentheses
No matching functionality Add #pragma once directive
No matching functionality Remove redundant qualifier and 25+ more quick-fixes

Coding Assistance

Highlight matching delimiters Highlight paired items (including macros and format arguments in printf and boost::format)
Highlight current line Highlight current line
Acronyms / Shorthand CamelHumps
Suggestion lists / Smart suggestions Code completion with smart suggestions
Convert dot to -> Convert dot to -> and -> to dot
Smart select Extend/Shrink selection + Select containing declaration
Multiple clipboards Clipboard history with preview of items
Parameter info Parameter info
Enhanced syntax coloring (4 different identifier kinds) / Stable symbols in italic / Local symbols in bold Syntax highlighting (20 different identifier kinds)
Highlight references to symbol under cursor Highlight usages in file
Surround selection Surround with / Comment with line or block comment
Insert closing tokens automatically Auto insert matching delimiter and format
Insert underscore after m and Shift No matching functionality
Quick info No matching functionality
Enhanced listboxes No matching functionality
Highlight matching words (code and comments) No matching functionality
Column (right margin) indicator No matching functionality
Auto-extend multi-line comments on Enter No matching functionality
Sort lines No matching functionality
Reset editor zoom No matching functionality
No matching functionality Duplicate current line or selection
No matching functionality Quick documentation
No matching functionality Auto-highlighting of function exits

Code Style Assistance

Format after paste (formatting rules are inherited from Visual Studio) Apply formatting rules in any scope (with ReSharper C++'s own extensive set of formatting rules)
No matching functionality Configurable naming style rules for generated code
No matching functionality Configurable style for const and volatile modifiers in generated code
No matching functionality Configurable style for include directive in generated code
No matching functionality Configurable style for default pointer initializers (0|nullptr|NULL) in generated code

Refactorings and Code Transformations

Access to Refactoring Commands Refactor this
Rename Rename
Change signature Change signature
Introduce variable Introduce variable
Encapsulate field Encapsulate field (with Generate getters and setters action)
Extract method Extract method
Add/Remove braces Add/Remove braces
Rename files Rename file
Move implementation to source file Move implementation out of class scope
Move Implementation to Header File / Class Declaration No matching functionality
Move selection to new file No matching functionality
Snippets for refactorings (editable) No matching functionality
No matching functionality Introduce field
No matching functionality Inline variable
No matching functionality Introduce namespace alias
No matching functionality Add = default, = delete, pure, or virtual specifier to a function
No matching functionality Convert ?: to if and vice versa
No matching functionality Convert #include directive from angle-bracket to quoted form and vice versa
No matching functionality Convert a typedef declaration into an alias declaration and vice versa
No matching functionality Create derived class, interface, or struct
No matching functionality Flip relational operator
No matching functionality Flip operator arguments
No matching functionality Initialize field from constructor parameter
No matching functionality Invert if statement
No matching functionality Merge nested if statements
No matching functionality Negate logical expression
No matching functionality Remove braces
No matching functionality Replace auto with explicit type declaration
No matching functionality Replace decltype with the underlying type
No matching functionality Split or join declaration with multiple declarations
No matching functionality Substitute macro call
No matching functionality Substitute template type alias
No matching functionality Substitute typedef (and, optionally, all nested typedefs)

Code Generation

Implement Interface / Virtual Methods Generate missing / overriding members
Create implementation Generate implementation + Generate inline implementation
Create method implementations Generate definitions
Add missing case statements Generate missing case statements for enum
Document method Document symbol
Add member No matching functionality
Add similar member No matching functionality
No matching functionality Generate constructors
No matching functionality Generate copy and move operators
No matching functionality Generate getters and setters
No matching functionality Generate equality operators
No matching functionality Generate relational operators
No matching functionality Generate stream operations (including Boost.Serialization functions)
No matching functionality Generate hash function
No matching functionality Generate swap function
No matching functionality Generate Google Mock methods
No matching functionality Create derived type

Code Snippets/Templates

VA Snippets 30 built-in live templates + custom live templates
Surround with snippets 19 built-in surround templates + custom surround templates
Create file (needs to be called twice for header and cpp) Built-in file templates for class and struct (create both files at once) + custom file templates
Reserved strings /environment placeholders in snippets Macros in code templates
Snippet editor Template editor
Create snippet from selection Create live template from selection
No matching functionality Multi-file templates

Navigation & Search

Go to declaration (with Goto) Go to declaration (usage-aware)
Go to implementation (with Goto) Go to implementation
VA outline File structure
Recent files (VA view) Go to recent files
Open file in solution Go to file
Find symbol in solution Go to symbol
Goto related Go to related files
Goto member Go to file member
Move scope Go to next/previous member
Find references Find usages
Find by context Go to next/previous highlight / Find Results window
Open corresponding file Switch between header and source
Navigate back and forward Move through navigation history
VA Hashtags Bookmarks
List methods in file No matching functionality
VA navigation bar No matching functionality
Hovering class browser No matching functionality
Highlight project files in the Output window No matching functionality
Highlight find results No matching functionality
No matching functionality Go to everything
No matching functionality Go to text
No matching functionality Go to recent edits
No matching functionality Go to previous edit
No matching functionality Navigate to
No matching functionality Go to base symbols
No matching functionality Go to derived symbols
No matching functionality Go to type of symbol
No matching functionality Type hierarchy
No matching functionality Hierarchy of includes
No matching functionality Go to primary template/specializations
No matching functionality Locate current file in Solution Explorer
No matching functionality Navigate to action
No matching functionality To-do explorer

Debugging

Step Filter No matching functionality

Unit Testing

No matching functionality Unit Testing Assistance for Google Test and Boost.Test frameworks

Settings Management

Import/export settings Automatic multi-layer synchronization of settings and custom templates