/Zc
(Conformance)
You can use the /Zc
compiler options to specify standard or Microsoft-specific compiler behavior.
Syntax
/Zc:
option{,option ...}
You may set multiple /Zc
options separated by commas in a single /Zc
compiler option. If a /Zc
option is enabled and disabled in the same command, the option that appears last is used.
Remarks
When Visual Studio has implemented an extension to C or C++ that is incompatible with the standard, you can use a /Zc
conformance option to specify standard-conforming or Microsoft-specific behavior. For some options, the Microsoft-specific behavior is the default, to prevent large-scale breaking changes to existing code. In other cases, the default is the standard behavior, where improvements in security, performance, or compatibility outweigh the costs of breaking changes. The default setting of each conformance option may change in newer versions of Visual Studio. For more information about each conformance option, see the article for the specific option. The /permissive-
compiler option implicitly sets the conformance options that aren't set by default to their conforming settings.
Here are the /Zc
compiler options:
Option | Behavior |
---|---|
/Zc:__cplusplus |
Enable the __cplusplus macro to report the supported standard (off by default). |
/Zc:__STDC__ |
Enable the __STDC__ macro to report the C standard is supported (off by default). |
/Zc:alignedNew |
Enable C++17 over-aligned dynamic allocation (on by default in C++17). |
/Zc:auto |
Enforce the new Standard C++ meaning for auto (on by default). |
/Zc:char8_t |
Enable or disable C++20 native u8 literal support as const char8_t (off by default, except under /std:c++20 ). |
/Zc:enumTypes[-] |
Enable Standard C++ rules for enum type deduction (off by default). |
/Zc:externC |
Enforce Standard C++ rules for extern "C" functions (implied by /permissive- ). |
/Zc:externConstexpr |
Enable external linkage for constexpr variables (off by default). |
/Zc:forScope |
Enforce Standard C++ for scoping rules (on by default). |
/Zc:gotoScope |
Enforce Standard C++ goto rules around local variable initialization (implied by /permissive- ). |
/Zc:hiddenFriend |
Enforce Standard C++ hidden friend rules (implied by /permissive- ) |
/Zc:implicitNoexcept |
Enable implicit noexcept on required functions (on by default). |
/Zc:inline |
Remove unreferenced functions or data if they're COMDAT or have internal linkage only (off by default). |
/Zc:lambda |
Enable new lambda processor for conformance-mode syntactic checks in generic lambdas. |
/Zc:noexceptTypes |
Enforce C++17 noexcept rules (on by default in C++17 or later). |
/Zc:nrvo[-] |
Enable optional copy and move elisions (on by default under /O2 , /permissive- , or /std:c++20 or later). |
/Zc:preprocessor |
Use the new conforming preprocessor (off by default, except in C11/C17). |
/Zc:referenceBinding |
A UDT temporary won't bind to a non-const lvalue reference (off by default). |
/Zc:rvalueCast |
Enforce Standard C++ explicit type conversion rules (off by default). |
/Zc:sizedDealloc |
Enable C++14 global sized deallocation functions (on by default). |
/Zc:strictStrings |
Disable string-literal to char* or wchar_t* conversion (off by default). |
/Zc:static_assert |
strict handling of static_assert (implied by /permissive- ). |
/Zc:templateScope[-] |
Enforce Standard C++ template parameter shadowing rules (off by default). |
/Zc:ternary |
Enforce conditional operator rules on operand types (off by default). |
/Zc:threadSafeInit |
Enable thread-safe local static initialization (on by default). |
/Zc:throwingNew |
Assume operator new throws on failure (off by default). |
/Zc:tlsGuards[-] |
Generate runtime checks for TLS variable initialization (on by default). |
/Zc:trigraphs |
Enable trigraphs (obsolete, off by default). |
/Zc:twoPhase |
Use non-conforming template parsing behavior (conforming by default). |
/Zc:wchar_t |
wchar_t is a native type, not a typedef (on by default). |
/Zc:zeroSizeArrayNew[-] |
Call member new /delete for 0-size arrays of objects (on by default). |
For more information about conformance issues in MSVC, see Nonstandard behavior.
See also
Feedback
Submit and view feedback for