﻿<?xml version="1.0" encoding="utf-8"?>
<!--Copyright, Microsoft Corporation, All rights reserved.-->
<Rule
   Name="CL"
   PageTemplate="tool"
   DisplayName="C/C++"
   SwitchPrefix="/"
   Order="10"
   xmlns="http://schemas.microsoft.com/build/2009/properties"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:sys="clr-namespace:System;assembly=mscorlib">
  <Rule.Categories>
    <Category
       Name="General"
       DisplayName="General" />
    <Category
       Name="Optimization"
       DisplayName="Optimization" />
    <Category
       Name="Preprocessor"
       DisplayName="Preprocessor" />
    <Category
       Name="Code Generation"
       DisplayName="Code Generation" />
    <Category
       Name="Language"
       DisplayName="Language" />
    <Category
       Name="Precompiled Headers"
       DisplayName="Precompiled Headers" />
    <Category
       Name="Output Files"
       DisplayName="Output Files" />
    <Category
       Name="Browse Information"
       DisplayName="Browse Information" />
    <Category
       Name="External Includes"
       DisplayName="External Includes" />
    <Category
       Name="Advanced"
       DisplayName="Advanced" />
    <Category
       Name="All Options"
       DisplayName="All Options"
       Subtype="Search" />
    <Category
       Name="Command Line"
       DisplayName="Command Line"
       Subtype="CommandLine" />
  </Rule.Categories>
  <Rule.DataSource>
    <DataSource
       Persistence="ProjectFile"
       ItemType="ClCompile"
       Label=""
       HasConfigurationCondition="true" />
  </Rule.DataSource>
  <StringListProperty
     Subtype="folder"
     Name="AdditionalIncludeDirectories"
     DisplayName="Additional Include Directories"
     Description="Specifies one or more directories to add to the include path. Separate with ';' if more than one.     (/I[path])"
     Category="General"
     Switch="I"
     F1Keyword="VC.Project.VCCLCompilerTool.AdditionalIncludeDirectories">
  </StringListProperty>
  <StringListProperty
     Subtype="folder"
     Name="AdditionalUsingDirectories"
     DisplayName="Additional #using Directories"
     Description="Specifies one or more directories to be searched to resolve names passed to a #using directive. Separate with ';' if more than one. (/AI[path])"
     Category="General"
     Switch="AI"
     F1Keyword="VC.Project.VCCLCompilerTool.AdditionalUsingDirectories">
  </StringListProperty>
  <StringListProperty
     Subtype="folder"
     Name="AdditionalBMIDirectories"
     DisplayName="Additional BMI Directories"
     Description="Specifies one or more directories to be searched to resolve names passed to an import directive. Separate with ';' if more than one.  (/ifcSearchDir[path])"
     Category="General"
     Switch="ifcSearchDir "
     F1Keyword="VC.Project.VCCLCompilerTool.AdditionalModuleDirectories">
  </StringListProperty>
  <StringListProperty
     Subtype="file"
     Name="AdditionalModuleDependencies"
     DisplayName="Additional Module Dependencies"
     Description="Specifies one or more modules to be used to resolve names passed to an import directive. Separate with ';' if more than one.  (/reference[[module_name=]path])"
     Category="General"
     Switch="reference "
     F1Keyword="VC.Project.VCCLCompilerTool.AdditionalModuleDependencies">
  </StringListProperty>
  <StringListProperty
     Subtype="file"
     Name="AdditionalHeaderUnitDependencies"
     DisplayName="Additional Header Unit Dependencies"
     Description="Specifies one or more header units to be used to resolve names passed to an import header directive. Separate with ';' if more than one.  (/headerUnit[header=path])"
     Category="General"
     Switch="headerUnit "
     F1Keyword="VC.Project.VCCLCompilerTool.AdditionalModuleDependencies">
  </StringListProperty>
  <BoolProperty
     Name="ScanSourceForModuleDependencies"
     DisplayName="Scan Sources for Module Dependencies"
     Description="Makes the build scan all c++ sources, not just module interface and header unit sources, for module and header units dependencies and build the full dependencies graph."
     Category="General"
     IncludeInCommandLine="false"
     F1Keyword="VC.Project.VCCLCompilerTool.ScanSourceForModuleDependencies">
  </BoolProperty>
  <BoolProperty
     Name="TranslateIncludes"
     DisplayName="Translate Includes to Imports"
     Description="Enables the compiler to translate #include directives into import directives for the available header units.  (/translateInclude)"
     Category="General"
     Switch="translateInclude"
     F1Keyword="VC.Project.VCCLCompilerTool.TranslateIncludes">
  </BoolProperty>
  <EnumProperty
     Name="DebugInformationFormat"
     DisplayName="Debug Information Format"
     Description="Specifies the type of debugging information generated by the compiler.  This requires compatible linker settings.    (/Z7, /Zi, /ZI)"
     Category="General"
     F1Keyword="VC.Project.VCCLCompilerTool.DebugInformationFormat">
    <EnumValue
       Name="None"
       Switch=""
       DisplayName="None"
       Description="Produces no debugging information, so compilation may be faster.">
    </EnumValue>
    <EnumValue
       Name="OldStyle"
       Switch="Z7"
       DisplayName="C7 compatible"
       Description="Select the type of debugging information created for your program and whether this information is kept in object (.obj) files or in a program database (PDB).">
    </EnumValue>
    <EnumValue
       Name="ProgramDatabase"
       Switch="Zi"
       DisplayName="Program Database"
       Description="Produces a program database (PDB) that contains type information and symbolic debugging information for use with the debugger. The symbolic debugging information includes the names and types of variables, as well as functions and line numbers. ">
    </EnumValue>
    <EnumValue
       Name="EditAndContinue"
       Switch="ZI"
       DisplayName="Program Database for Edit And Continue"
       Description="Produces a program database, as described above, in a format that supports the Edit and Continue feature.">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     Name="SupportJustMyCode"
     DisplayName="Support Just My Code Debugging"
     Description="Adds supporting code for enabling Just My Code debugging in this compilation unit.  (/JMC)"
     Category="General"
     Switch="JMC"
     F1Keyword="VC.Project.VCCLCompilerTool.SupportJustMyCode">
  </BoolProperty>
  <BoolProperty
     Name="UseDynamicDebugging"
     DisplayName="Support C++ Dynamic Debugging"
     Description="(Preview) Sets compiler flag /dynamicdeopt to turn on C++ Dynamic Debugging. Place deoptimized breakpoints and step in anywhere with on-demand function deoptimization. Use this mode for debugging optimized code."
     Category="General"
     Switch="dynamicdeopt"
     F1Keyword="/dynamicdeopt">
  </BoolProperty>
  <StringProperty
     Name="DynamicDebuggingSuffix"
     Category="General"
     Switch="dynamicdeopt:suffix"
     Separator=" "
     Visible="false">
  </StringProperty>
  <EnumProperty
     Name="CompileAsManaged"
     DisplayName="Common Language RunTime Support"
     Description="Use the .NET runtime service.  This switch is incompatible with some other switches; see the documentation on the /clr family of switches for details."
     Category="General"
     F1Keyword="VC.Project.VCCLCompilerTool.CompileAsManaged">
    <EnumValue
       Name="false"
       Switch=""
       DisplayName="No Common Language RunTime Support"
       Description="No Common Language RunTime Support">
    </EnumValue>
    <EnumValue
       Name="true"
       Switch="clr"
       DisplayName="Common Language RunTime Support"
       Description="Creates metadata for your application that can be consumed by other CLR applications, and allows your application to consume types and data in the metadata of other CLR components.">
    </EnumValue>
    <EnumValue
       Name="Pure"
       Switch="clr:pure"
       DisplayName="Pure MSIL Common Language RunTime Support"
       Description="Produces an MSIL-only output file with no native executable code, although it can contain native types compiled to MSIL.">
    </EnumValue>
    <EnumValue
       Name="Safe"
       Switch="clr:safe"
       DisplayName="Safe MSIL Common Language RunTime Support"
       Description="Produces an MSIL-only (no native executable code) and verifiable output file.">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     Name="CompileAsWinRT"
     DisplayName="Consume Windows Runtime Extension"
     Description="Consume the Windows Run Time languages extensions.  (/ZW)"
     Category="General"
     Switch="ZW"
     F1Keyword="VC.Project.VCCLCompilerTool.CompileAsWinRT">
  </BoolProperty>
  <BoolProperty
     Name="WinRTNoStdLib"
     DisplayName="No Standard WinRT Libraries"
     Description="Tells the compiler not to use default Windows.winmd. It should be passed as /FU in this case."
     Category="General"
     Switch="ZW:nostdlib"
     Visible="false">
  </BoolProperty>
  <BoolProperty
     Name="SuppressStartupBanner"
     DisplayName="Suppress Startup Banner"
     Description="Suppresses the display of the sign-on banner when the compiler starts up and display of informational messages during compiling."
     Category="General"
     Switch="nologo"
     F1Keyword="VC.Project.VCCLCompilerTool.SuppressStartupBanner">
  </BoolProperty>
  <EnumProperty
     Name="WarningLevel"
     DisplayName="Warning Level"
     Description="Select how strict you want the compiler to be about code errors.     (/W0 - /W4)"
     Category="General"
     F1Keyword="VC.Project.VCCLCompilerTool.WarningLevel">
    <EnumValue
       Name="TurnOffAllWarnings"
       Switch="W0"
       DisplayName="Turn Off All Warnings"
       Description="Level 0 disables all warnings.">
    </EnumValue>
    <EnumValue
       Name="Level1"
       Switch="W1"
       DisplayName="Level1"
       Description="Level 1 displays severe warnings. Level 1 is the default warning level at the command line.">
    </EnumValue>
    <EnumValue
       Name="Level2"
       Switch="W2"
       DisplayName="Level2"
       Description="Level 2 displays all level 1 warnings and warnings less severe than level 1.">
    </EnumValue>
    <EnumValue
       Name="Level3"
       Switch="W3"
       DisplayName="Level3"
       Description="Level 3 displays all level 2 warnings and all other warnings recommended for production purposes.">
    </EnumValue>
    <EnumValue
       Name="Level4"
       Switch="W4"
       DisplayName="Level4"
       Description="Level 4 displays all level 3 warnings plus informational warnings, which in most cases can be safely ignored.">
    </EnumValue>
    <EnumValue
       Name="EnableAllWarnings"
       Switch="Wall"
       DisplayName="EnableAllWarnings"
       Description="Enables all warnings, including those disabled by default.">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     ReverseSwitch="WX-"
     Name="TreatWarningAsError"
     DisplayName="Treat Warnings As Errors"
     Description="Treats all compiler warnings as errors. For a new project, it may be best to use /WX in all compilations; resolving all warnings will ensure the fewest possible hard-to-find code defects."
     Category="General"
     Switch="WX"
     F1Keyword="VC.Project.VCCLCompilerTool.WarnAsError">
  </BoolProperty>
  <StringProperty
     Name="WarningVersion"
     DisplayName="Warning Version"
     Description="Hide warnings introduced after a specific version of the compiler.     (/Wv:xx[.yy[.zzzzz]])"
     Category="General"
     Switch="Wv:"
     F1Keyword="VC.Project.VCCLCompilerTool.WarningVersion">
  </StringProperty>
  <EnumProperty
     Name="DiagnosticsFormat"
     DisplayName="Diagnostics Format"
     Description="Enables rich diagnostics, with column information and source context in diagnostic messages."
     Category="General"
     F1Keyword="VC.Project.VCCLCompilerTool.DiagnosticsFormat">
    <EnumValue
       Name="Caret"
       Switch="diagnostics:caret"
       DisplayName="Caret"
       Description="Provides column information in the diagnostic message, as well as outputting the relevant line of source code with a caret indicating the offending column.">
    </EnumValue>
    <EnumValue
       Name="Column"
       Switch="diagnostics:column"
       DisplayName="Column Info"
       Description="Additionally provides the column number within the line where the diagnostic is issued, where applicable.">
    </EnumValue>
    <EnumValue
       Name="Classic"
       Switch="diagnostics:classic"
       DisplayName="Classic"
       Description="Retains the prior, concise diagnostic messages with the line number.">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     ReverseSwitch="sdl-"
     Name="SDLCheck"
     DisplayName="SDL checks"
     Description="Additional Security Development Lifecycle (SDL) recommended checks; includes enabling additional secure code generation features and enables extra security-relevant warnings as errors.     (/sdl, /sdl-)"
     Category="General"
     Switch="sdl"
     F1Keyword="VC.Project.VCCLCompilerTool.SDLCheck">
  </BoolProperty>
  <StringProperty
     Subtype="folder"
     Name="TrackerLogDirectory"
     DisplayName="Tracker Log Directory"
     Description="Tracker Log Directory."
     Category="General"
     IncludeInCommandLine="false"
     Visible="false">
  </StringProperty>
  <BoolProperty
     Name="MultiProcessorCompilation"
     DisplayName="Multi-processor Compilation"
     Description="Multi-processor Compilation."
     Category="General"
     Switch="MP"
     F1Keyword="VC.Project.VCCLCompilerTool.MultiProcessorCompilation">
    <Argument
       Property="ProcessorNumber"
       IsRequired="false" />
  </BoolProperty>
  <IntProperty
     Name="ProcessorNumber"
     DisplayName="Number of processors"
     Description="Number of processors."
     Category="General"
     Visible="false">
  </IntProperty>
  <BoolProperty
     Name="ForceSynchronousPDBWrites"
     DisplayName="Force Synchronous PDB Writes"
     Description="Synchronous write to pdb when building in parallel."
     Category="General"
     Switch="FS"
     Visible="false"
     F1Keyword="VC.Project.VCCLCompilerTool.ForceSynchronousPDBWrites">
  </BoolProperty>
  <BoolProperty
     Name="EnableASAN"
     DisplayName="Enable Address Sanitizer"
     Description="Compiles and links program with AddressSanitizer. Currently available for x86 and x64 builds."
     Category="General"
     Switch="fsanitize=address"
     F1Keyword="VC.Project.VCCLCompilerTool.EnableASAN">
    <BoolProperty.DataSource>
      <DataSource
         Persistence="ProjectFile"
         ItemType=""
         Label="Configuration"
         HasConfigurationCondition="true" />
    </BoolProperty.DataSource>
  </BoolProperty>
  <BoolProperty
     Name="EnableFuzzer"
     DisplayName="Enable Fuzzer Support (Experimental)"
     Description="Compiles programs with the Fuzzer. Enable AddressSanitizer for best results. Currently available for x86 and x64 builds."
     Category="General"
     Switch="fsanitize=fuzzer"
     F1Keyword="VC.Project.VCCLCompilerTool.EnableFuzzer">
    <BoolProperty.DataSource>
      <DataSource
         Persistence="ProjectFile"
         ItemType=""
         Label="Configuration"
         HasConfigurationCondition="true" />
    </BoolProperty.DataSource>
  </BoolProperty>
  <EnumProperty
     Name="Optimization"
     DisplayName="Optimization"
     Description="Select option for code optimization; choose Custom to use specific optimization options.     (/Od, /O1, /O2)"
     Category="Optimization"
     F1Keyword="VC.Project.VCCLCompilerTool.Optimization">
    <EnumValue
       Name="Custom"
       Switch=""
       DisplayName="Custom"
       Description="Custom optimization.">
    </EnumValue>
    <EnumValue
       Name="Disabled"
       Switch="Od"
       DisplayName="Disabled"
       Description="Disable optimization.">
    </EnumValue>
    <EnumValue
       Name="MinSpace"
       Switch="O1"
       DisplayName="Maximum Optimization (Favor Size)"
       Description="Equivalent to /Og /Os /Oy /Ob2 /Gs /GF /Gy">
    </EnumValue>
    <EnumValue
       Name="MaxSpeed"
       Switch="O2"
       DisplayName="Maximum Optimization (Favor Speed)"
       Description="Equivalent to /Og /Oi /Ot /Oy /Ob2 /Gs /GF /Gy">
    </EnumValue>
    <EnumValue
       Name="Full"
       Switch="Ox"
       DisplayName="Optimizations (Favor Speed)"
       Description="Equivalent to /Og /Oi /Ot /Oy /Ob2">
    </EnumValue>
  </EnumProperty>
  <EnumProperty
     Name="InlineFunctionExpansion"
     DisplayName="Inline Function Expansion"
     Description="Select the level of inline function expansion for the build.     (/Ob1, /Ob2)"
     Category="Optimization"
     F1Keyword="VC.Project.VCCLCompilerTool.InlineFunctionExpansion">
    <EnumValue
       Name="Default"
       Switch=""
       DisplayName="Default">
    </EnumValue>
    <EnumValue
       Name="Disabled"
       Switch="Ob0"
       DisplayName="Disabled"
       Description="Disables inline expansion, which is on by default.">
    </EnumValue>
    <EnumValue
       Name="OnlyExplicitInline"
       Switch="Ob1"
       DisplayName="Only __inline"
       Description="Expands only functions marked as inline, __inline, __forceinline or __inline or, in a C++ member function, defined within a class declaration.">
    </EnumValue>
    <EnumValue
       Name="AnySuitable"
       Switch="Ob2"
       DisplayName="Any Suitable"
       Description="Expands functions marked as inline or __inline and any other function that the compiler chooses (expansion occurs at the compiler's discretion, often referred to as auto-inlining).">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     Name="IntrinsicFunctions"
     DisplayName="Enable Intrinsic Functions"
     Description="Enables intrinsic functions.  Using intrinsic functions generates faster, but possibly larger, code.     (/Oi)"
     Category="Optimization"
     Switch="Oi"
     F1Keyword="VC.Project.VCCLCompilerTool.EnableIntrinsicFunctions">
  </BoolProperty>
  <EnumProperty
     Name="FavorSizeOrSpeed"
     DisplayName="Favor Size Or Speed"
     Description="Whether to favor code size or code speed; 'Global Optimization' must be turned on.     (/Ot, /Os)"
     Category="Optimization"
     F1Keyword="VC.Project.VCCLCompilerTool.FavorSizeOrSpeed">
    <EnumValue
       Name="Size"
       Switch="Os"
       DisplayName="Favor small code"
       Description="Favor Small Code. Minimizes the size of EXEs and DLLs by instructing the compiler to favor size over speed.">
    </EnumValue>
    <EnumValue
       Name="Speed"
       Switch="Ot"
       DisplayName="Favor fast code"
       Description="Favor Fast Code. Maximizes the speed of EXEs and DLLs by instructing the compiler to favor speed over size. (This is the default.) ">
    </EnumValue>
    <EnumValue
       Name="Neither"
       Switch=""
       DisplayName="Neither"
       Description="No size nor speed optimization.">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     ReverseSwitch="Oy-"
     Name="OmitFramePointers"
     DisplayName="Omit Frame Pointers"
     Description="Suppresses creation of frame pointers on the call stack."
     Category="Optimization"
     Switch="Oy"
     F1Keyword="VC.Project.VCCLCompilerTool.OmitFramePointers">
  </BoolProperty>
  <BoolProperty
     Name="EnableFiberSafeOptimizations"
     DisplayName="Enable Fiber-Safe Optimizations"
     Description="Enables memory space optimization when using fibers and thread local storage access.     (/GT)"
     Category="Optimization"
     Switch="GT"
     F1Keyword="VC.Project.VCCLCompilerTool.EnableFiberSafeOptimizations">
  </BoolProperty>
  <BoolProperty
     Name="WholeProgramOptimization"
     DisplayName="Whole Program Optimization"
     Description="Enables cross-module optimizations by delaying code generation to link time; requires that linker option 'Link Time Code Generation' be turned on.     (/GL)"
     Category="Optimization"
     Switch="GL"
     F1Keyword="VC.Project.VCCLWCECompilerTool.WholeProgramOptimization">
  </BoolProperty>
  <StringListProperty
     Name="PreprocessorDefinitions"
     DisplayName="Preprocessor Definitions"
     Description="Defines a preprocessing symbols for your source file."
     Category="Preprocessor"
     Switch="D "
     F1Keyword="VC.Project.VCCLCompilerTool.PreprocessorDefinitions">
  </StringListProperty>
  <StringListProperty
     Name="UndefinePreprocessorDefinitions"
     DisplayName="Undefine Preprocessor Definitions"
     Description="Specifies one or more preprocessor undefines.     (/U[macro])"
     Category="Preprocessor"
     Switch="U"
     F1Keyword="VC.Project.VCCLCompilerTool.UndefinePreprocessorDefinitions">
  </StringListProperty>
  <BoolProperty
     Name="UndefineAllPreprocessorDefinitions"
     DisplayName="Undefine All Preprocessor Definitions"
     Description="Undefine all previously defined preprocessor values.     (/u)"
     Category="Preprocessor"
     Switch="u"
     F1Keyword="VC.Project.VCCLCompilerTool.UndefineAllPreprocessorDefinitions">
  </BoolProperty>
  <BoolProperty
     Name="IgnoreStandardIncludePath"
     DisplayName="Ignore Standard Include Paths"
     Description="Prevents the compiler from searching for include files in directories specified in the INCLUDE environment variables."
     Category="Preprocessor"
     Switch="X"
     F1Keyword="VC.Project.VCCLCompilerTool.IgnoreStandardIncludePath">
  </BoolProperty>
  <BoolProperty
     Name="PreprocessToFile"
     DisplayName="Preprocess to a File"
     Description="Preprocesses C and C++ source files and writes the preprocessed output to a file. This option suppresses compilation, thus it does not produce an .obj file."
     Category="Preprocessor"
     Switch="P"
     F1Keyword="VC.Project.VCCLCompilerTool.GeneratePreprocessedFile">
  </BoolProperty>
  <StringProperty
     Name="PreprocessOutputPath"
     DisplayName="Preprocess Output Path"
     Description="Specify the output path for the preprocesser. The default location is the same as the source file(s)."
     Category="Preprocessor"
     Switch="Fi"
     Visible="false">
  </StringProperty>
  <BoolProperty
     Name="PreprocessSuppressLineNumbers"
     DisplayName="Preprocess Suppress Line Numbers"
     Description="Preprocess without #line directives."
     Category="Preprocessor"
     Switch="EP"
     F1Keyword="VC.Project.VCCLCompilerTool.GeneratePreprocessedFileNoLines">
  </BoolProperty>
  <BoolProperty
     Name="PreprocessKeepComments"
     DisplayName="Keep Comments"
     Description="Suppresses comment strip from source code; requires that one of the 'Preprocessing' options be set.     (/C)"
     Category="Preprocessor"
     Switch="C"
     F1Keyword="VC.Project.VCCLCompilerTool.KeepComments">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="Zc:preprocessor-"
     Name="UseStandardPreprocessor"
     DisplayName="Use Standard Conforming Preprocessor"
     Description="Use a standard conforming preprocessor (/Zc:preprocessor). Currently implied by /std:c11 and later versions. To use legacy preprocessor set this property to 'No'. "
     Category="Preprocessor"
     Switch="Zc:preprocessor"
     F1Keyword="VC.Project.VCCLCompilerTool.PreprocessorStandard">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="GF-"
     Name="StringPooling"
     DisplayName="Enable String Pooling"
     Description="Enables the compiler to create a single read-only copy of identical strings in the program image and in memory during execution, resulting in smaller programs, an optimization called string pooling. /O1, /O2, and /ZI  automatically set /GF option. "
     Category="Code Generation"
     Switch="GF"
     F1Keyword="VC.Project.VCCLCompilerTool.StringPooling">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="Gm-"
     Name="MinimalRebuild"
     DisplayName="Enable Minimal Rebuild"
     Description="Enables minimal rebuild, which determines whether C++ source files that include changed C++ class definitions (stored in header (.h) files) need to be recompiled."
     Category="Code Generation"
     Switch="Gm"
     F1Keyword="VC.Project.VCCLCompilerTool.MinimalRebuild">
  </BoolProperty>
  <EnumProperty
     Name="ExceptionHandling"
     DisplayName="Enable C++ Exceptions"
     Description="Specifies the model of exception handling to be used by the compiler."
     Category="Code Generation"
     F1Keyword="VC.Project.VCCLCompilerTool.ExceptionHandling">
    <EnumValue
       Name="Async"
       Switch="EHa"
       DisplayName="Yes with SEH Exceptions"
       Description="The exception-handling model that catches asynchronous (structured) and synchronous (C++) exceptions. (/EHa)">
    </EnumValue>
    <EnumValue
       Name="Sync"
       Switch="EHsc"
       DisplayName="Yes"
       Description="The exception-handling model that catches C++ exceptions only and tells the compiler to assume that extern C functions never throw a C++ exception. (/EHsc)">
    </EnumValue>
    <EnumValue
       Name="SyncCThrow"
       Switch="EHs"
       DisplayName="Yes with Extern C functions"
       Description="The exception-handling model that catches C++ exceptions only and tells the compiler to assume that extern C functions do throw an exception. (/EHs)">
    </EnumValue>
    <EnumValue
       Name="false"
       Switch=""
       DisplayName="No"
       Description="No exception handling.">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     Name="SmallerTypeCheck"
     DisplayName="Smaller Type Check"
     Description="Enable checking for conversion to smaller types, incompatible with any optimization type other than debug.     (/RTCc)"
     Category="Code Generation"
     Switch="RTCc"
     F1Keyword="VC.Project.VCCLCompilerTool.SmallerTypeCheck">
  </BoolProperty>
  <EnumProperty
     Name="BasicRuntimeChecks"
     DisplayName="Basic Runtime Checks"
     Description="Perform basic runtime error checks, incompatible with any optimization type other than debug.     (/RTCs, /RTCu, /RTC1)"
     Category="Code Generation"
     F1Keyword="VC.Project.VCCLCompilerTool.BasicRuntimeChecks">
    <EnumValue
       Name="StackFrameRuntimeCheck"
       Switch="RTCs"
       DisplayName="Stack Frames"
       Description="Enables stack frame run-time error checking.">
    </EnumValue>
    <EnumValue
       Name="UninitializedLocalUsageCheck"
       Switch="RTCu"
       DisplayName="Uninitialized variables"
       Description="Reports when a variable is used without having been initialized.">
    </EnumValue>
    <EnumValue
       Name="EnableFastChecks"
       Switch="RTC1"
       DisplayName="Both (/RTC1, equiv. to /RTCsu)"
       Description="Equivalent of /RTCsu.">
    </EnumValue>
    <EnumValue
       Name="Default"
       Switch=""
       DisplayName="Default"
       Description="Default runtime checks.">
    </EnumValue>
  </EnumProperty>
  <EnumProperty
     Name="RuntimeLibrary"
     DisplayName="Runtime Library"
     Description="Specify runtime library for linking.     (/MT, /MTd, /MD, /MDd)"
     Category="Code Generation"
     F1Keyword="VC.Project.VCCLCompilerTool.RuntimeLibrary">
    <EnumValue
       Name="MultiThreaded"
       Switch="MT"
       DisplayName="Multi-threaded"
       Description="Causes your application to use the multithread, static version of the run-time library.">
    </EnumValue>
    <EnumValue
       Name="MultiThreadedDebug"
       Switch="MTd"
       DisplayName="Multi-threaded Debug"
       Description="Defines _DEBUG and _MT. This option also causes the compiler to place the library name LIBCMTD.lib into the .obj file so that the linker will use LIBCMTD.lib to resolve external symbols.">
    </EnumValue>
    <EnumValue
       Name="MultiThreadedDLL"
       Switch="MD"
       DisplayName="Multi-threaded DLL"
       Description="Causes your application to use the multithread- and DLL-specific version of the run-time library. Defines _MT and _DLL and causes the compiler to place the library name MSVCRT.lib into the .obj file.">
    </EnumValue>
    <EnumValue
       Name="MultiThreadedDebugDLL"
       Switch="MDd"
       DisplayName="Multi-threaded Debug DLL"
       Description="Defines _DEBUG, _MT, and _DLL and causes your application to use the debug multithread- and DLL-specific version of the run-time library. It also causes the compiler to place the library name MSVCRTD.lib into the .obj file.">
    </EnumValue>
  </EnumProperty>
  <EnumProperty
     Name="StructMemberAlignment"
     DisplayName="Struct Member Alignment"
     Description="Specifies 1, 2, 4, 8, or 16-byte boundaries for struct member alignment.     (/Zp[num])"
     Category="Code Generation"
     F1Keyword="VC.Project.VCCLCompilerTool.StructMemberAlignment">
    <EnumValue
       Name="1Byte"
       Switch="Zp1"
       DisplayName="1 Byte"
       Description="Packs structures on 1-byte boundaries. Same as /Zp.">
    </EnumValue>
    <EnumValue
       Name="2Bytes"
       Switch="Zp2"
       DisplayName="2 Bytes"
       Description="Packs structures on 2-byte boundaries.">
    </EnumValue>
    <EnumValue
       Name="4Bytes"
       Switch="Zp4"
       DisplayName="4 Byte"
       Description="Packs structures on 4-byte boundaries.">
    </EnumValue>
    <EnumValue
       Name="8Bytes"
       Switch="Zp8"
       DisplayName="8 Bytes"
       Description="Packs structures on 8-byte boundaries (default).">
    </EnumValue>
    <EnumValue
       Name="16Bytes"
       Switch="Zp16"
       DisplayName="16 Bytes"
       Description="Packs structures on 16-byte boundaries.">
    </EnumValue>
    <EnumValue
       Name="Default"
       Switch=""
       DisplayName="Default"
       Description="Default alignment settings.">
    </EnumValue>
  </EnumProperty>
  <EnumProperty
     Name="BufferSecurityCheck"
     DisplayName="Security Check"
     Description="The Security Check helps detect stack-buffer over-runs, a common attempted attack upon a program's security.  .  (/GS-, /GS)"
     Category="Code Generation"
     F1Keyword="VC.Project.VCCLCompilerTool.BufferSecurityCheck">
    <EnumValue
       Name="false"
       Switch="GS-"
       DisplayName="Disable Security Check"
       Description="Disable Security Check. (/GS-)">
    </EnumValue>
    <EnumValue
       Name="true"
       Switch="GS"
       DisplayName="Enable Security Check"
       Description="Enable Security Check. (/GS)">
    </EnumValue>
  </EnumProperty>
  <EnumProperty
     Name="ControlFlowGuard"
     DisplayName="Control Flow Guard"
     Description="Guard security check helps detect attempts to dispatch to illegal block of code. (/guard:cf)"
     Category="Code Generation"
     F1Keyword="VC.Project.VCCLCompilerTool.ControlFlowGuard">
    <EnumValue
       Name="Guard"
       Switch="guard:cf"
       DisplayName="Yes"
       Description="Enable Security Check with Guard (/guard:cf)">
    </EnumValue>
    <EnumValue
       Name="false"
       Switch=""
       DisplayName="No">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     ReverseSwitch="Gy-"
     Name="FunctionLevelLinking"
     DisplayName="Enable Function-Level Linking"
     Description="Allows the compiler to package individual functions in the form of packaged functions (COMDATs). Required for edit and continue to work.     (/Gy)"
     Category="Code Generation"
     Switch="Gy"
     F1Keyword="VC.Project.VCCLCompilerTool.EnableFunctionLevelLinking">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="Qpar-"
     Name="EnableParallelCodeGeneration"
     DisplayName="Enable Parallel Code Generation"
     Description="Allows the compiler to generate parallel code for loops identified using #pragma loop(hint_parallel[(n)]) when optimization is enabled."
     Category="Code Generation"
     Switch="Qpar"
     F1Keyword="VC.Project.VCCLCompilerTool.EnableParallelCodeGeneration">
  </BoolProperty>
  <EnumProperty
     Name="EnableEnhancedInstructionSet"
     DisplayName="Enable Enhanced Instruction Set"
     Description="Enable use of instructions found on processors that support enhanced instruction sets. If no option is specified, the compiler will use instructions found on processors that support SSE2. Use of enhanced instructions can be disabled with /arch:IA32.   (/arch:SSE, /arch:SSE2, /arch:AVX, /arch:AVX2, /arch:AVX512, /arch:IA32, /arch:ARMv7VE, /arch:VFPv4, /arch:[armv8.0-armv8.8],)"
     Category="Code Generation"
     F1Keyword="VC.Project.VCCLCompilerTool.EnableEnhancedInstructionSet">
    <EnumValue
       Name="StreamingSIMDExtensions"
       Switch="arch:SSE"
       DisplayName="Streaming SIMD Extensions (X86)"
       Description="Streaming SIMD Extensions (X86). (/arch:SSE)">
    </EnumValue>
    <EnumValue
       Name="StreamingSIMDExtensions2"
       Switch="arch:SSE2"
       DisplayName="Streaming SIMD Extensions 2 (X86)"
       Description="Streaming SIMD Extensions 2 (X86). (/arch:SSE2)">
    </EnumValue>
    <EnumValue
       Name="AdvancedVectorExtensions"
       Switch="arch:AVX"
       DisplayName="Advanced Vector Extensions (X86/X64)"
       Description="Advanced Vector Extensions (X86/X64). (/arch:AVX)">
    </EnumValue>
    <EnumValue
       Name="AdvancedVectorExtensions2"
       Switch="arch:AVX2"
       DisplayName="Advanced Vector Extensions 2 (X86/X64)"
       Description="Advanced Vector Extensions 2 (X86/X64). (/arch:AVX2)">
    </EnumValue>
    <EnumValue
       Name="AdvancedVectorExtensions512"
       Switch="arch:AVX512"
       DisplayName="Advanced Vector Extensions 512 (X86/X64)"
       Description="Advanced Vector Extensions 512. (X86/X64) (/arch:AVX512)">
    </EnumValue>
    <EnumValue
       Name="AdvancedVectorExtensions101"
       Switch="arch:AVX10.1"
       DisplayName="Advanced Vector Extensions AVX10.1 (X86/X64)"
       Description="Advanced Vector Extensions 10.1. (X86/X64) (/arch:AVX10.1)">
    </EnumValue>
    <EnumValue
       Name="VirtualizationExtensions"
       Switch="arch:ARMv7VE"
       DisplayName="Virtualization Extensions (ARM)"
       Description="Virtualization Extensions (ARM). (/arch:ARMv7VE)">
    </EnumValue>
    <EnumValue
       Name="ARMVFPv4Instructions"
       Switch="arch:VFPv4"
       DisplayName="ARM VFPv4 instructions (ARM)"
       Description="ARM VFPv4 instructions (ARM). (/arch:VFPv4)">
    </EnumValue>
    <EnumValue
       Name="CPUExtensionRequirementsARMv80"
       Switch="arch:armv8.0"
       DisplayName="CPU extension requirements ARMv8.0-A (ARM64)"
       Description="CPU extension requirements ARMv8.0-A (ARM64). (/arch:armv8.0)">
    </EnumValue>
    <EnumValue
       Name="CPUExtensionRequirementsARMv81"
       Switch="arch:armv8.1"
       DisplayName="CPU extension requirements ARMv8.1-A (ARM64)"
       Description="CPU extension requirements ARMv8.1-A (ARM64). (/arch:armv8.1)">
    </EnumValue>
    <EnumValue
       Name="CPUExtensionRequirementsARMv82"
       Switch="arch:armv8.2"
       DisplayName="CPU extension requirements ARMv8.2-A (ARM64)"
       Description="CPU extension requirements ARMv8.2-A (ARM64). (/arch:armv8.2)">
    </EnumValue>
    <EnumValue
       Name="CPUExtensionRequirementsARMv83"
       Switch="arch:armv8.3"
       DisplayName="CPU extension requirements ARMv8.3-A (ARM64)"
       Description="CPU extension requirements ARMv8.3-A (ARM64). (/arch:armv8.3)">
    </EnumValue>
    <EnumValue
       Name="CPUExtensionRequirementsARMv84"
       Switch="arch:armv8.4"
       DisplayName="CPU extension requirements ARMv8.4-A (ARM64)"
       Description="CPU extension requirements ARMv8.4-A (ARM64). (/arch:armv8.4)">
    </EnumValue>
    <EnumValue
       Name="CPUExtensionRequirementsARMv85"
       Switch="arch:armv8.5"
       DisplayName="CPU extension requirements ARMv8.5-A (ARM64)"
       Description="CPU extension requirements ARMv8.5-A (ARM64). (/arch:armv8.5)">
    </EnumValue>
    <EnumValue
       Name="CPUExtensionRequirementsARMv86"
       Switch="arch:armv8.6"
       DisplayName="CPU extension requirements ARMv8.6-A (ARM64)"
       Description="CPU extension requirements ARMv8.6-A (ARM64). (/arch:armv8.6)">
    </EnumValue>
    <EnumValue
       Name="CPUExtensionRequirementsARMv87"
       Switch="arch:armv8.7"
       DisplayName="CPU extension requirements ARMv8.7-A (ARM64)"
       Description="CPU extension requirements ARMv8.7-A (ARM64). (/arch:armv8.7)">
    </EnumValue>
    <EnumValue
       Name="CPUExtensionRequirementsARMv88"
       Switch="arch:armv8.8"
       DisplayName="CPU extension requirements ARMv8.8-A (ARM64)"
       Description="CPU extension requirements ARMv8.8-A (ARM64). (/arch:armv8.8)">
    </EnumValue>
    <EnumValue
       Name="NoExtensions"
       Switch="arch:IA32"
       DisplayName="No Enhanced Instructions"
       Description="No Enhanced Instructions. (/arch:IA32)">
    </EnumValue>
    <EnumValue
       Name="NotSet"
       Switch=""
       DisplayName="Not Set"
       Description="Not Set.">
    </EnumValue>
  </EnumProperty>
  <EnumProperty
     Name="EnableVectorLength"
     DisplayName="Enable Vector Length"
     Description="Enable choosing vector length for /arch:AVX512 and /arch:AVX10.x flags. Allowed values are 256 and 512 bits (X86/X64)."
     Category="Code Generation"
     F1Keyword="VC.Project.VCCLCompilerTool.VectorLength">
    <EnumValue
       Name="NotSet"
       Switch=""
       DisplayName="Not Set"
       Description="Not Set.">
    </EnumValue>
    <EnumValue
       Name="VectorLength256"
       Switch="vlen=256"
       DisplayName="256"
       Description="Vector length 256. (/vlen=256)">
    </EnumValue>
    <EnumValue
       Name="VectorLength512"
       Switch="vlen=512"
       DisplayName="512"
       Description="Vector length 512. (/vlen=512)">
    </EnumValue>
  </EnumProperty>
  <EnumProperty
     Name="FloatingPointModel"
     DisplayName="Floating Point Model"
     Description="Sets the floating point model.     (/fp:precise, /fp:strict, /fp:fast)"
     Category="Code Generation"
     F1Keyword="VC.Project.VCCLCompilerTool.floatingPointModel">
    <EnumValue
       Name="Precise"
       Switch="fp:precise"
       DisplayName="Precise"
       Description="Default. Improves the consistency of floating-point tests for equality and inequality.">
    </EnumValue>
    <EnumValue
       Name="Strict"
       Switch="fp:strict"
       DisplayName="Strict"
       Description="The strictest floating-point model. /fp:strict causes fp_contract to be OFF and fenv_access to be ON. /fp:except is implied and can be disabled by explicitly specifying /fp:except-. When used with /fp:except-, /fp:strict enforces strict floating-point semantics but without respect for exceptional events.">
    </EnumValue>
    <EnumValue
       Name="Fast"
       Switch="fp:fast"
       DisplayName="Fast"
       Description="Creates the fastest code in the majority of cases. ">
    </EnumValue>
    <EnumValue
       Name="Default"
       Switch=""
       DisplayName="Default"
       Description="Default.">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     ReverseSwitch="fp:except-"
     Name="FloatingPointExceptions"
     DisplayName="Enable Floating Point Exceptions"
     Description="Reliable floating-point exception model. Exceptions will be raised immediately after they are triggered.      (/fp:except)"
     Category="Code Generation"
     Switch="fp:except"
     F1Keyword="VC.Project.VCCLCompilerTool.FloatingPointExceptions">
  </BoolProperty>
  <BoolProperty
     Name="CreateHotpatchableImage"
     DisplayName="Create Hotpatchable Image"
     Description="When hotpatching is on, the compiler ensures that first instruction of each function is two bytes, which is required for hot patching.  (/hotpatch)"
     Category="Code Generation"
     Switch="hotpatch"
     F1Keyword="VC.Project.VCCLCompilerTool.CreateHotpatchableImage">
  </BoolProperty>
  <EnumProperty
     Name="SpectreMitigation"
     DisplayName="Spectre Mitigation"
     Description="Spectre mitigations for CVE 2017-5753.     (/Qspectre)"
     Category="Code Generation"
     F1Keyword="VC.Project.VCCLCompilerTool.SpectreMitigation">
    <EnumProperty.DataSource>
      <DataSource
         Persistence="ProjectFile"
         ItemType=""
         Label="Configuration"
         HasConfigurationCondition="true" />
    </EnumProperty.DataSource>
    <EnumValue
       Name="Spectre"
       Switch="Qspectre"
       DisplayName="Enabled"
       Description="Enable Spectre mitigation feature for CVE 2017-5753">
    </EnumValue>
    <EnumValue
       Name="SpectreLoad"
       Switch="Qspectre-load"
       DisplayName="All Loads"
       Description="Enable Spectre mitigations for all load instructions">
    </EnumValue>
    <EnumValue
       Name="SpectreLoadCF"
       Switch="Qspectre-load-cf"
       DisplayName="All Control Flow Loads"
       Description="Enable Spectre mitigations for all control flow load instructions">
    </EnumValue>
    <EnumValue
       Name="false"
       Switch=""
       DisplayName="Disabled"
       Description="Not Set.">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     Name="IntelJCCErratum"
     DisplayName="Enable Intel JCC Erratum Mitigation"
     Description=" Software mitigation for the performance impact caused by the Intel JCC erratum microcode update.       (/QIntel-jcc-erratum)"
     Category="Code Generation"
     Switch="QIntel-jcc-erratum"
     F1Keyword="VC.Project.VCCLCompilerTool.IntelJCCErratum">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="guard:ehcont-"
     Name="GuardEHContMetadata"
     DisplayName="Enable EH Continuation Metadata"
     Description="Generates a sorted list of all the valid exception handling continuation targets for a binary, used during runtime for RIP validation. Currently available for x64 builds.  (/guard:ehcont)"
     Category="Code Generation"
     Switch="guard:ehcont"
     F1Keyword="VC.Project.VCCLCompilerTool.GuardEHContMetadata">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="guard:signret-"
     Name="GuardSignedReturns"
     DisplayName="Enable Signed Returns"
     Description="Enables signed returns which help detect and prevent attempts to dispatch to illegal blocks from function returns. Currently available for ARM64 builds. (/guard:signret)"
     Category="Code Generation"
     Switch="guard:signret"
     F1Keyword="VC.Project.VCCLCompilerTool.GuardSignedReturns">
  </BoolProperty>
  <BoolProperty
     Name="DisableLanguageExtensions"
     DisplayName="Disable Language Extensions"
     Description="Suppresses or enables language extensions.     (/Za)"
     Category="Language"
     Switch="Za"
     F1Keyword="VC.Project.VCCLCompilerTool.DisableLanguageExtensions">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="Zc:wchar_t-"
     Name="TreatWChar_tAsBuiltInType"
     DisplayName="Treat WChar_t As Built in Type"
     Description="When specified, the type wchar_t becomes a native type that maps to __wchar_t in the same way that short maps to __int16. /Zc:wchar_t is on by default."
     Category="Language"
     Switch="Zc:wchar_t"
     F1Keyword="VC.Project.VCCLCompilerTool.TreatWChar_tAsBuiltInType">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="Zc:forScope-"
     Name="ForceConformanceInForLoopScope"
     DisplayName="Force Conformance in For Loop Scope"
     Description="Used to implement standard C++ behavior for the for statement loops with Microsoft extensions (/Za, /Ze (Disable Language Extensions)). /Zc:forScope is on by default."
     Category="Language"
     Switch="Zc:forScope"
     F1Keyword="VC.Project.VCCLCompilerTool.ForceConformanceInForLoopScope">
  </BoolProperty>
  <BoolProperty
     Name="RemoveUnreferencedCodeData"
     DisplayName="Remove unreferenced code and data"
     Description="When specified, compiler no longer generates symbol information for unreferenced code and data."
     Category="Language"
     Switch="Zc:inline"
     F1Keyword="VC.Project.VCCLCompilerTool.RemoveUnreferencedCodeData">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="Zc:rvalueCast-"
     Name="EnforceTypeConversionRules"
     DisplayName="Enforce type conversion rules"
     Description="Used to identify an rvalue reference type as the result of a cast operation in accordance with the C++11 standard."
     Category="Language"
     Switch="Zc:rvalueCast"
     F1Keyword="VC.Project.VCCLCompilerTool.EnforceTypeConversionRules">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="GR-"
     Name="RuntimeTypeInfo"
     DisplayName="Enable Run-Time Type Information"
     Description="Adds code for checking C++ object types at run time (runtime type information).     (/GR, /GR-)"
     Category="Language"
     Switch="GR"
     F1Keyword="VC.Project.VCCLCompilerTool.RuntimeTypeInfo">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="openmp-"
     Name="OpenMPSupport"
     DisplayName="Open MP Support"
     Description="Enable OpenMP 2.0 language extensions.     (/openmp)"
     Category="Language"
     Switch="openmp"
     F1Keyword="VC.Project.VCCLCompilerTool.OpenMP">
  </BoolProperty>
  <EnumProperty
     Name="LanguageStandard"
     DisplayName="C++ Language Standard"
     Description="Determines the C++ language standard the compiler will enforce. It is recommended to use the latest version when possible. (/std:c++14, /std:c++17, /std:c++20, /std:c++23preview, /std:c++latest)"
     Category="Language"
     F1Keyword="VC.Project.VCCLCompilerTool.CppLanguageStandard">
    <EnumValue
       Name="Default"
       Switch=""
       DisplayName="Default (ISO C++14 Standard)">
    </EnumValue>
    <EnumValue
       Name="stdcpp14"
       Switch="std:c++14"
       DisplayName="ISO C++14 Standard">
    </EnumValue>
    <EnumValue
       Name="stdcpp17"
       Switch="std:c++17"
       DisplayName="ISO C++17 Standard">
    </EnumValue>
    <EnumValue
       Name="stdcpp20"
       Switch="std:c++20"
       DisplayName="ISO C++20 Standard">
    </EnumValue>
    <EnumValue
       Name="stdcpp23"
       Switch="std:c++23preview"
       DisplayName="Preview - ISO C++23 Standard">
    </EnumValue>
    <EnumValue
       Name="stdcpplatest"
       Switch="std:c++latest"
       DisplayName="Preview - Features from the Latest C++ Working Draft">
    </EnumValue>
  </EnumProperty>
  <EnumProperty
     Name="LanguageStandard_C"
     DisplayName="C Language Standard"
     Description="Determines the C language standard the compiler will enforce. It is recommended to use the latest version when possible. (/std:c11, /std:c17, /std:clatest)"
     Category="Language"
     F1Keyword="VC.Project.VCCLCompilerTool.CLanguageStandard">
    <EnumValue
       Name="Default"
       Switch=""
       DisplayName="Default (Legacy MSVC)">
    </EnumValue>
    <EnumValue
       Name="stdc11"
       Switch="std:c11"
       DisplayName="ISO C11 Standard">
    </EnumValue>
    <EnumValue
       Name="stdc17"
       Switch="std:c17"
       DisplayName="ISO C17 (2018) Standard">
    </EnumValue>
    <EnumValue
       Name="stdclatest"
       Switch="std:clatest"
       DisplayName="Preview - Features from the Latest C Working Draft">
    </EnumValue>
  </EnumProperty>
  <EnumProperty
     Name="ConformanceMode"
     DisplayName="Conformance mode"
     Description="Enables or suppresses conformance mode. (/permissive-, /permissive). "
     Category="Language"
     F1Keyword="VC.Project.VCCLCompilerTool.ConformanceMode">
    <EnumValue
       Name="Default"
       Switch=""
       DisplayName="Default">
    </EnumValue>
    <EnumValue
       Name="true"
       Switch="permissive-"
       DisplayName="Yes">
    </EnumValue>
    <EnumValue
       Name="false"
       Switch="permissive"
       DisplayName="No">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     Name="EnableModules"
     DisplayName="Enable Experimental C++ Standard Library Modules"
     Description="Enables support for the experimental modules std.core, std.filesystem, std.memory, std.regex, and std.threading."
     Category="Language"
     Switch="experimental:module"
     F1Keyword="VC.Project.VCCLCompilerTool.ModulesSupport">
  </BoolProperty>
  <StringListProperty
     Subtype="folder"
     Name="StdIfcDirectory"
     Category="Language"
     Switch="stdIfcDir "
     Visible="false">
  </StringListProperty>
  <BoolProperty
     Name="BuildStlModules"
     DisplayName="Build ISO C++23 Standard Library Modules"
     Description="Enables automatic build of std and std.compat modules when using /std:c++latest."
     Category="Language"
     IncludeInCommandLine="false"
     F1Keyword="VC.Project.VCCLCompilerTool.BuildStlModules">
  </BoolProperty>
  <EnumProperty
     Name="PrecompiledHeader"
     DisplayName="Precompiled Header"
     Description="Create/Use Precompiled Header : Enables creation or use of a precompiled header during the build.     (/Yc, /Yu)"
     Category="Precompiled Headers"
     F1Keyword="VC.Project.VCCLCompilerTool.UsePrecompiledHeader">
    <EnumValue
       Name="Create"
       Switch="Yc"
       DisplayName="Create"
       Description="Instructs the compiler to create a precompiled header (.pch) file that represents the state of compilation at a certain point.">
      <Argument
         Property="PrecompiledHeaderFile"
         IsRequired="false" />
    </EnumValue>
    <EnumValue
       Name="Use"
       Switch="Yu"
       DisplayName="Use"
       Description="Instructs the compiler to use an existing precompiled header (.pch) file in the current compilation.">
      <Argument
         Property="PrecompiledHeaderFile"
         IsRequired="false" />
    </EnumValue>
    <EnumValue
       Name="NotUsing"
       Switch=""
       DisplayName="Not Using Precompiled Headers"
       Description="Not using precompiled headers. ">
    </EnumValue>
  </EnumProperty>
  <StringProperty
     Subtype="file"
     Name="PrecompiledHeaderFile"
     DisplayName="Precompiled Header File"
     Description="Specifies header file name to use when creating or using a precompiled header file. (/Yc[name], /Yu[name])"
     Category="Precompiled Headers"
     F1Keyword="VC.Project.VCCLCompilerTool.PrecompiledHeaderThrough">
  </StringProperty>
  <StringProperty
     Subtype="file"
     Name="PrecompiledHeaderOutputFile"
     DisplayName="Precompiled Header Output File"
     Description="Specifies the path and/or name of the generated precompiled header file. (/Fp[name])"
     Category="Precompiled Headers"
     Switch="Fp"
     F1Keyword="VC.Project.VCCLCompilerTool.PrecompiledHeaderFile">
  </StringProperty>
  <BoolProperty
     Name="ExpandAttributedSource"
     DisplayName="Expand Attributed Source"
     Description="Create listing file with expanded attributes injected into source file.     (/Fx)"
     Category="Output Files"
     Switch="Fx"
     F1Keyword="VC.Project.VCCLCompilerTool.ExpandAttributedSource">
  </BoolProperty>
  <EnumProperty
     Name="AssemblerOutput"
     DisplayName="Assembler Output"
     Description="Specifies the contents of assembly language output file.     (/FA, /FAc, /FAs, /FAcs)"
     Category="Output Files"
     F1Keyword="VC.Project.VCCLCompilerTool.AssemblerOutput">
    <EnumValue
       Name="NoListing"
       Switch=""
       DisplayName="No Listing"
       Description="No listing. ">
    </EnumValue>
    <EnumValue
       Name="AssemblyCode"
       Switch="FA"
       DisplayName="Assembly-Only Listing"
       Description="Assembly code; .asm">
    </EnumValue>
    <EnumValue
       Name="AssemblyAndMachineCode"
       Switch="FAc"
       DisplayName="Assembly With Machine Code"
       Description="Machine and assembly code; .cod">
    </EnumValue>
    <EnumValue
       Name="AssemblyAndSourceCode"
       Switch="FAs"
       DisplayName="Assembly With Source Code"
       Description="Source and assembly code; .asm">
    </EnumValue>
    <EnumValue
       Name="All"
       Switch="FAcs"
       DisplayName="Assembly, Machine Code and Source"
       Description="Assembly, machine code and source code; .cod">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     Name="UseUnicodeForAssemblerListing"
     DisplayName="Use Unicode For Assembler Listing"
     Description="Causes the output file to be created in UTF-8 format. "
     Category="Output Files"
     Switch="FAu"
     F1Keyword="VC.Project.VCCLCompilerTool.UseUnicodeForAssemblerListing">
  </BoolProperty>
  <StringProperty
     Subtype="file"
     Name="AssemblerListingLocation"
     DisplayName="ASM List Location"
     Description="Specifies relative path and/or name for ASM listing file; can be file or directory name.     (/Fa[name])"
     Category="Output Files"
     Switch="Fa"
     F1Keyword="VC.Project.VCCLCompilerTool.AssemblerListingLocation">
  </StringProperty>
  <StringProperty
     Subtype="file"
     Name="ModuleOutputFile"
     DisplayName="Module Output File Name"
     Description="Module or header unit output (BMI) file location; can be file or directory name.     (/ifcOutput[name])"
     Category="Output Files"
     Switch="ifcOutput "
     F1Keyword="VC.Project.VCCLCompilerTool.ModuleOutputFile">
  </StringProperty>
  <BoolProperty
     Name="GenerateModuleDependencies"
     DisplayName="Generate Module Dependenices File"
     Description="Generates a json file containing module and header units dependencies info. (/scanDependencies)"
     Category="Output Files"
     Switch="scanDependencies "
     Visible="false"
     F1Keyword="VC.Project.VCCLCompilerTool.GenerateModuleDependencies">
    <Argument
       Property="ModuleDependenciesFile"
       IsRequired="false" />
  </BoolProperty>
  <StringProperty
     Subtype="file"
     Name="ModuleDependenciesFile"
     DisplayName="Module Dependencies File Name"
     Description="Specifies the path and/or name of the generated module dependencies file. (/scanDependencies[path])"
     Category="Output Files"
     F1Keyword="VC.Project.VCCLCompilerTool.ModuleDependenciesFile">
  </StringProperty>
  <StringProperty
     Subtype="file"
     Name="ObjectFileName"
     DisplayName="Object File Name"
     Description="Specifies a name to override the default object file name; can be file or directory name.     (/Fo[name])"
     Category="Output Files"
     Switch="Fo"
     F1Keyword="VC.Project.VCCLCompilerTool.ObjectFile">
  </StringProperty>
  <StringProperty
     Subtype="file"
     Name="ProgramDataBaseFileName"
     DisplayName="Program Database File Name"
     Description="Specifies a name for a compiler-generated PDB file; also specifies base name for the required compiler-generated IDB file; can be file or directory name.     (/Fd[name])"
     Category="Output Files"
     Switch="Fd"
     F1Keyword="VC.Project.VCCLCompilerTool.ProgramDataBaseFileName">
  </StringProperty>
  <BoolProperty
     Name="GenerateXMLDocumentationFiles"
     DisplayName="Generate XML Documentation Files"
     Description="Specifies that the compiler should generate XML documentation comment files (.XDC).     (/doc)"
     Category="Output Files"
     Switch="doc"
     F1Keyword="VC.Project.VCCLCompilerTool.GenerateXMLDocumentationFiles">
    <Argument
       Property="XMLDocumentationFileName"
       IsRequired="false" />
  </BoolProperty>
  <StringProperty
     Subtype="file"
     Name="XMLDocumentationFileName"
     DisplayName="XML Documentation File Name"
     Description="Specifies the name of the generated XML documentation files; can be file or directory name.     (/doc[name])"
     Category="Output Files"
     F1Keyword="VC.Project.VCCLCompilerTool.XMLDocumentationFileName">
  </StringProperty>
  <BoolProperty
     Name="GenerateSourceDependencies"
     DisplayName="Generate Source Dependencies File"
     Description="Generates a json file with the list of all files the compiler used for the compilation of the source.     (/sourceDependencies)"
     Category="Output Files"
     Switch="sourceDependencies "
     F1Keyword="VC.Project.VCCLCompilerTool.GenerateSourceDependencies">
    <Argument
       Property="SourceDependenciesFile"
       IsRequired="false" />
  </BoolProperty>
  <StringProperty
     Subtype="file"
     Name="SourceDependenciesFile"
     DisplayName="Source Dependencies File Name"
     Description="Specifies the path and/or name of the generated source dependencies file. (/sourceDependencies[path])"
     Category="Output Files"
     F1Keyword="VC.Project.VCCLCompilerTool.SourceDependenciesFile">
  </StringProperty>
  <BoolProperty
     Name="BrowseInformation"
     DisplayName="Enable Browse Information"
     Description="Specifies that the compiler should generate .bsc file. Note that Visual Studio doesn't use .bsc files for C++ intellisense or browsing, so it is recommended to set this property to 'No'.    (/FR)"
     Category="Browse Information"
     Switch="FR"
     F1Keyword="VC.Project.VCCLCompilerTool.BrowseInformation">
    <Argument
       Property="BrowseInformationFile"
       IsRequired="false" />
  </BoolProperty>
  <StringProperty
     Subtype="file"
     Name="BrowseInformationFile"
     DisplayName="Browse Information File"
     Description="Browse File : Specifies optional name for browser information file.     (/FR[name])"
     Category="Browse Information"
     F1Keyword="VC.Project.VCCLCompilerTool.BrowseInformationFile">
  </StringProperty>
  <StringListProperty
     Subtype="string"
     Name="ExternalDirectoriesEnv"
     DisplayName="External Directories Environment Variables"
     Description="Specifies one or more environment variables which specify directories containing external headers. Separate with ';' if more than one.   (/external:env[name])"
     Category="External Includes"
     Switch="external:env:"
     Visible="false"
     F1Keyword="VC.Project.VCCLCompilerTool.ExternalDirectoriesEnv">
  </StringListProperty>
  <BoolProperty
     Name="TreatAngleIncludeAsExternal"
     DisplayName="Treat Files Included with Angle Brackets as External"
     Description="Specifies whether to treat files included with angle brackets as external.   (/external:anglebrackets)"
     Category="External Includes"
     Switch="external:anglebrackets"
     F1Keyword="VC.Project.VCCLCompilerTool.ExternalIncludeDirectories">
  </BoolProperty>
  <EnumProperty
     Name="ExternalWarningLevel"
     DisplayName="External Header Warning Level"
     Description="Select how strict you want the compiler to be about code errors in external headers.     (/external:W0 - /external:W4)"
     Category="External Includes"
     F1Keyword="VC.Project.VCCLCompilerTool.ExternalWarningLevel">
    <EnumValue
       Name="TurnOffAllWarnings"
       Switch="external:W0"
       DisplayName="Turn Off All Warnings">
    </EnumValue>
    <EnumValue
       Name="Level1"
       Switch="external:W1"
       DisplayName="Level1">
    </EnumValue>
    <EnumValue
       Name="Level2"
       Switch="external:W2"
       DisplayName="Level2">
    </EnumValue>
    <EnumValue
       Name="Level3"
       Switch="external:W3"
       DisplayName="Level3">
    </EnumValue>
    <EnumValue
       Name="Level4"
       Switch="external:W4"
       DisplayName="Level4">
    </EnumValue>
    <EnumValue
       Name="InheritWarningLevel"
       Switch=""
       DisplayName="Inherit Project Warning Level">
    </EnumValue>
  </EnumProperty>
  <BoolProperty
     Name="ExternalTemplatesDiagnostics"
     DisplayName="Template Diagnostics in External Headers"
     Description="Specifies whether to evaluate warning level across template instantiation chain.   (/external:templates-)"
     Category="External Includes"
     Switch="external:templates-"
     F1Keyword="VC.Project.VCCLCompilerTool.TreatExternalTemplatesAsInternal">
  </BoolProperty>
  <BoolProperty
     Name="DisableAnalyzeExternal"
     DisplayName="Disable Code Analysis for External Headers"
     Description="Disables code analysis for external headers.     (/analyze:external-)"
     Category="External Includes"
     Switch="analyze:external-"
     F1Keyword="VC.Project.VCCLCompilerTool.DisableAnalyzeExternal">
  </BoolProperty>
  <DynamicEnumProperty
     EnumProvider="CARuleset"
     Name="AnalyzeExternalRuleset"
     DisplayName="Analysis Ruleset for External Headers"
     Description="Specifies a code analysis ruleset override for external headers. If not specified, the Code Analysis setting is used.   (/analyze:external:ruleset[path])"
     Category="External Includes"
     Switch="analyze:external:ruleset"
     F1Keyword="VC.Project.VCCLCompilerTool.AnalyzeExternalRuleset">
    <DynamicEnumProperty.ValueEditors>
      <ValueEditor
         EditorType="DefaultFilePropertyEditor"
         DisplayName="&lt;Browse...&gt;" />
      <ValueEditor
         EditorType="DefaultStringPropertyEditor"
         DisplayName="&lt;Edit...&gt;" />
    </DynamicEnumProperty.ValueEditors>
  </DynamicEnumProperty>
  <EnumProperty
     Name="CallingConvention"
     DisplayName="Calling Convention"
     Description="Select the default calling convention for your application (can be overridden by function).     (/Gd, /Gr, /Gz, /Gv)"
     Category="Advanced"
     F1Keyword="VC.Project.VCCLCompilerTool.CallingConvention">
    <EnumValue
       Name="Cdecl"
       Switch="Gd"
       DisplayName="__cdecl"
       Description="Specifies the __cdecl calling convention for all functions except C++ member functions and functions marked __stdcall or __fastcall.">
    </EnumValue>
    <EnumValue
       Name="FastCall"
       Switch="Gr"
       DisplayName="__fastcall"
       Description="Specifies the __fastcall calling convention for all functions except C++ member sfunctions and functions marked __cdecl or __stdcall. All __fastcall functions must have prototypes.">
    </EnumValue>
    <EnumValue
       Name="StdCall"
       Switch="Gz"
       DisplayName="__stdcall"
       Description="Specifies the __stdcall calling convention for all functions except C++ member functions and functions marked __cdecl or __fastcall. All __stdcall functions must have prototypes.">
    </EnumValue>
    <EnumValue
       Name="VectorCall"
       Switch="Gv"
       DisplayName="__vectorcall"
       Description="Specifies the __vectorcall calling convention for all functions except C++ member functions and functions marked __cdecl, __fastcall, or __stdcall. All __vectorcall functions must have prototypes.">
    </EnumValue>
  </EnumProperty>
  <EnumProperty
     Name="CompileAs"
     DisplayName="Compile As"
     Description="Select compile language option for .c and .cpp files.     (/TC, /TP, /interface, /internalPartition, /exportHeader)"
     Category="Advanced"
     F1Keyword="VC.Project.VCCLCompilerTool.CompileAs">
    <EnumValue
       Name="Default"
       Switch=""
       DisplayName="Default"
       Description="Default.">
    </EnumValue>
    <EnumValue
       Name="CompileAsC"
       Switch="TC"
       DisplayName="Compile as C Code"
       Description="Compile as C Code.">
    </EnumValue>
    <EnumValue
       Name="CompileAsCpp"
       Switch="TP"
       DisplayName="Compile as C++ Code"
       Description="Compile as C++ Code.">
    </EnumValue>
    <EnumValue
       Name="CompileAsCppModule"
       Switch="interface "
       DisplayName="Compile as C++ Module Code"
       Description="Compile as C++ Module Interace.">
    </EnumValue>
    <EnumValue
       Name="CompileAsCppModuleInternalPartition"
       Switch="internalPartition "
       DisplayName="Compile as C++ Module Internal Partition"
       Description="Compile as C++ Module Internal Partition.">
    </EnumValue>
    <EnumValue
       Name="CompileAsHeaderUnit"
       Switch="exportHeader "
       DisplayName="Compile as C++ Header Unit"
       Description="Compile as C++ Header Unit.">
    </EnumValue>
  </EnumProperty>
  <StringListProperty
     Name="DisableSpecificWarnings"
     DisplayName="Disable Specific Warnings"
     Description="Disable the desired warning numbers; put numbers in a semi-colon delimited list.     (/wd[num])"
     Category="Advanced"
     Switch="wd"
     F1Keyword="VC.Project.VCCLCompilerTool.DisableSpecificWarnings">
  </StringListProperty>
  <StringListProperty
     Subtype="file"
     Name="ForcedIncludeFiles"
     DisplayName="Forced Include File"
     Description="one or more forced include files.     (/FI[name])"
     Category="Advanced"
     Switch="FI"
     F1Keyword="VC.Project.VCCLCompilerTool.ForcedIncludeFiles">
  </StringListProperty>
  <StringListProperty
     Subtype="file"
     Name="ForcedUsingFiles"
     DisplayName="Forced #using File"
     Description="Specifies one or more forced #using files.     (/FU[name])"
     Category="Advanced"
     Switch="FU"
     F1Keyword="VC.Project.VCCLCompilerTool.ForcedUsingFiles">
  </StringListProperty>
  <BoolProperty
     Name="ShowIncludes"
     DisplayName="Show Includes"
     Description="Generates a list of include files with compiler output.     (/showIncludes)"
     Category="Advanced"
     Switch="showIncludes"
     F1Keyword="VC.Project.VCCLCompilerTool.ShowIncludes">
  </BoolProperty>
  <BoolProperty
     ReverseSwitch="analyze-"
     Name="EnablePREfast"
     DisplayName="Enable Code Analysis"
     Description="Enables code analysis functionality that identifies common coding defects in C/C++ code.     (/analyze)"
     Category="Advanced"
     Switch="analyze"
     Visible="false"
     F1Keyword="VC.Project.VCCLCompilerTool.EnablePREfast">
  </BoolProperty>
  <StringProperty
     Subtype="file"
     Name="PREfastLog"
     DisplayName="Code Analysis Log"
     Description="Specific the name of the output file.     (/analyze:log)"
     Category="Advanced"
     Switch="analyze:log "
     Visible="false"
     F1Keyword="VC.Project.VCCLCompilerTool.EnablePREfast">
  </StringProperty>
  <StringProperty
     Name="PREfastProjectDirectory"
     DisplayName="Code Analysis Project Directory"
     Description="Specify the name of PREfast project directory root.     (/analyze:projectdirectory)"
     Category="Advanced"
     Switch="analyze:projectdirectory"
     Visible="false"
     F1Keyword="VC.Project.VCCLCompilerTool.EnablePREfast">
  </StringProperty>
  <StringProperty
     Name="PREfastRulesetDirectories"
     DisplayName="Code Analysis Ruleset Directories"
     Description="Specifies one or more directories (separate directory names with a semicolon) that are used to search for ruleset files.     (/analyze:rulesetdirectory)"
     Category="Advanced"
     Switch="analyze:rulesetdirectory"
     Visible="false"
     F1Keyword="VC.Project.VCCLCompilerTool.EnablePREfast">
  </StringProperty>
  <StringProperty
     Subtype="file"
     Name="PREfastRulesetFile"
     DisplayName="Code Analysis Ruleset File"
     Description="Specify the name of ruleset file to use.     (/analyze:ruleset)"
     Category="Advanced"
     Switch="analyze:ruleset"
     Visible="false"
     F1Keyword="VC.Project.VCCLCompilerTool.EnablePREfast">
  </StringProperty>
  <StringListProperty
     Name="PREfastAdditionalOptions"
     DisplayName="Additional Code Analysis Native options"
     Description="Extra options to use for code analysis."
     Category="Advanced"
     Switch="analyze:"
     Visible="false"
     F1Keyword="VC.Project.VCCLCompilerTool.PREfastAdditionalOptions">
  </StringListProperty>
  <StringListProperty
     Name="PREfastAdditionalPlugins"
     DisplayName="Additional Code Analysis Native plugins"
     Description="Extra plugins to use for code analysis.     (/analyze:plugin[plugin1.dll])"
     Category="Advanced"
     Switch="analyze:plugin"
     Visible="false"
     F1Keyword="VC.Project.VCCLCompilerTool.PREfastAdditionalPlugins">
  </StringListProperty>
  <BoolProperty
     Name="UseFullPaths"
     DisplayName="Use Full Paths"
     Description="Use full paths in diagnostic messages.     (/FC)"
     Category="Advanced"
     Switch="FC"
     F1Keyword="VC.Project.VCCLCompilerTool.UseFullPaths">
  </BoolProperty>
  <BoolProperty
     Name="OmitDefaultLibName"
     DisplayName="Omit Default Library Name"
     Description="Do not include default library names in .obj files.     (/Zl)"
     Category="Advanced"
     Switch="Zl"
     F1Keyword="VC.Project.VCCLCompilerTool.OmitDefaultLibName">
  </BoolProperty>
  <EnumProperty
     Name="ErrorReporting"
     DisplayName="Internal Compiler Error Reporting"
     Description="Specifies how internal tool errors should be reported back to Microsoft.  The default in the IDE is prompt.  The default from command line builds is queue.     (/errorReport:[method])"
     Category="Advanced"
     F1Keyword="VC.Project.VCCLCompilerTool.ErrorReporting">
    <EnumValue
       Name="None"
       Switch="errorReport:none"
       DisplayName="Do Not Send Report"
       Description="Reports about internal compiler errors will not be collected or sent to Microsoft.">
    </EnumValue>
    <EnumValue
       Name="Prompt"
       Switch="errorReport:prompt"
       DisplayName="Prompt Immediately"
       Description="Prompts you to send a report when you receive an internal compiler error.">
    </EnumValue>
    <EnumValue
       Name="Queue"
       Switch="errorReport:queue"
       DisplayName="Queue For Next Login"
       Description="Queues the error report. When you log in with administrator privileges, a pop-up window is displayed and allows you to report any failures since the last time you were logged in (you will not be prompted to send reports for failures more than once every three days). queue is the default when compiling an application at the command line.">
    </EnumValue>
    <EnumValue
       Name="Send"
       Switch="errorReport:send"
       DisplayName="Send Automatically"
       Description="Automatically sends reports of internal compiler errors to Microsoft. To enable this option, you must first agree to Microsoft%27s data collection policy. The first time you specify /errorReport:send on a computer, a compiler message will refer you to a website that contains Microsoft%27s data collection policy.">
    </EnumValue>
  </EnumProperty>
  <StringListProperty
     Name="TreatSpecificWarningsAsErrors"
     DisplayName="Treat Specific Warnings As Errors"
     Description="Treats the specific compiler warning as an error where n is a compiler warning."
     Category="Advanced"
     Switch="we"
     F1Keyword="VC.Project.VCCLCompilerTool.TreatSpecificWarningsAsErrors">
  </StringListProperty>
  <StringProperty
     Name="AdditionalOptions"
     DisplayName="Additional Options"
     Description="Additional Options."
     Category="Command Line"
     F1Keyword="vc.project.AdditionalOptionsPage">
  </StringProperty>
  <BoolProperty
     Name="BuildingInIde"
     Visible="false">
  </BoolProperty>
</Rule>