/vmm
, /vms
, /vmv
(General Purpose Representation)
Used when /vmg
is selected as the representation method. These options indicate the inheritance model of the not-yet-encountered class definition.
Syntax
/vmm
/vms
/vmv
Options
/vmm
Specifies the most general representation of a pointer to a member of a class as one that uses multiple inheritance.
The corresponding inheritance keyword and argument to #pragma pointers_to_members
is multiple_inheritance
.
This representation is larger than the one required for single inheritance.
If you use /vmm
and declare a pointer to member of a class that has a virtual inheritance model, the compiler generates an error.
/vms
Specifies the most general representation of a pointer to a member of a class as one that uses either no inheritance or single inheritance.The corresponding inheritance keyword and argument to #pragma pointers_to_members
is single_inheritance
.
This option generates the smallest possible representation of a pointer to a member of a class.
If you use /vms
and declare a pointer to member of a class that has a multiple or virtual inheritance model, the compiler generates an error.
/vmv
Specifies the most general representation of a pointer to a member of a class as one that uses virtual inheritance. This pointer representation never causes an error and is the default.
The corresponding inheritance keyword and argument to #pragma pointers_to_members
is virtual_inheritance
.
This option requires a larger pointer and more code to interpret the pointer than the other options.
Remarks
In Visual Studio 2019 and earlier versions, Microsoft uses different representations (of different sizes) for pointer-to-member types. Pointers to members of classes that have no inheritance or single inheritance have the smallest representation. Pointers to members of classes that have multiple inheritance are larger. Pointers to members of classes that have virtual inheritance are the largest. When no representation model is specified to the compiler, it defaults to using the largest, most general representation.
When you specify one of these inheritance-model options, that model gets used for all pointers to class members, no matter their inheritance type or whether you declare the pointer before or after the class. If you always use single-inheritance classes, you can reduce code size by compiling with /vms
. However, if you want to use the most general case (at the expense of the largest data representation), compile with /vmv
.
To set this compiler option in the Visual Studio development environment
Open the project's Property Pages dialog box. For details, see Set C++ compiler and build properties in Visual Studio.
Select the Configuration Properties > C/C++ > Command Line property page.
Enter the compiler option in the Additional Options box.
To set this compiler option programmatically
- See AdditionalOptions.
See also
/vmb
, /vmg
(Representation method)
MSVC compiler options
MSVC compiler command-line syntax