/Zc (Conformance)

You can use the /Zc compiler options to specify standard or Microsoft-specific compiler behavior.




When Visual Studio has implemented an extension to C or C++ that is not compatible 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 topic for the specific option. The /permissive- compiler option implicitly sets the conformance options that are not set by default to their conformant setting.

These are the /Zc compiler options:

Option Behavior
/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__cplusplus Enable the __cplusplus macro to report the supported standard (off by default).
/Zc:externConstexpr Enable external linkage for constexpr variables (off by default).
/Zc:forScope Enforce Standard C++ for scoping rules (on by default).
/ZcimplicitNoexcept Enable implicit noexcept on required functions (on by default).
/Zc:inline Remove unreferenced function or data if it is COMDAT or has internal linkage only (off by default).
/Zc:noexceptTypes Enforce C++17 noexcept rules (on by default in C++17 or later).
/Zc:referenceBinding A UDT temporary will not bind to an 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: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: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).

For more information about conformance issues in Visual C++, see Nonstandard Behavior.

See also

MSVC Compiler Options
MSVC Compiler Command-Line Syntax