Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions docs/build/reference/advanced-property-page.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
---
description: "Use the Advanced property page in Visual Studio 2019 to set various properties for C++ projects."
title: "Advanced Property Page (Project)"
ms.date: 05/28/2021
f1_keywords: ["VC.Project.VCConfiguration.TargetExt", "VC.Project.VCConfiguration.DeleteExtensionsOnClean", "VC.Project.VCConfiguration.BuildLogFile", "VC.Project.VCConfiguration.PreferredToolArchitecture", "VC.Project.VCConfiguration.UseDebugLibraries", "VC.Project.VCConfiguration.EnableUnitySupport", "VC.Project.VCConfiguration.CopyLocalDeploymentContent", "VC.Project.VCConfiguration.CopyLocalProjectReference", "VC.Project.VCConfiguration.CopyLocalDebugSymbols", "VC.Project.VCConfiguration.CopyCppRuntimeToOutputDir", "VC.Project.VCConfiguration.useOfMfc", "VC.Project.VCConfiguration.CharacterSet", "VC.Project.VCConfiguration.WholeProgramOptimization", "VC.Project.VCConfiguration.VCToolsVersion", "VC.Project.VCConfiguration.LLVMToolsVersion", "VC.Project.VCConfiguration.ManagedExtensions", "VC.Project.TargetFrameworkVersion", "VC.Project.VCConfiguration.EnableManagedIncrementalBuild"]
ms.date: 11/22/2021
f1_keywords: ["VC.Project.VCConfiguration.TargetExt", "VC.Project.VCConfiguration.DeleteExtensionsOnClean", "VC.Project.VCConfiguration.BuildLogFile", "VC.Project.VCConfiguration.PreferredToolArchitecture", "VC.Project.VCConfiguration.UseDebugLibraries", "VC.Project.VCConfiguration.EnableUnitySupport", "VC.Project.VCConfiguration.CopyLocalDeploymentContent", "VC.Project.VCConfiguration.CopyLocalProjectReference", "VC.Project.VCConfiguration.CopyLocalDebugSymbols", "VC.Project.VCConfiguration.CopyCppRuntimeToOutputDir", "VC.Project.VCConfiguration.useOfMfc", "VC.Project.VCConfiguration.CharacterSet", "VC.Project.VCConfiguration.WholeProgramOptimization", "VC.Project.VCConfiguration.VCToolsVersion", "VC.Project.VCConfiguration.LLVMToolsVersion", "VC.Project.VCConfiguration.ManagedExtensions", "VC.Project.TargetFrameworkVersion", "VC.Project.VCConfiguration.EnableManagedIncrementalBuild", "VC.Project.VCConfiguration.ManagedAssembly"]
---
# Advanced Property Page

Expand Down Expand Up @@ -112,4 +112,8 @@ In managed projects, specifies the .NET framework version to target.

For managed projects, this option enables detection of external visibility when you generate assemblies. If a change to a managed project isn't visible to other projects, dependent projects aren't rebuilt. Managed incremental builds can dramatically improve build times in solutions that include managed projects.

### Enable CLR Support for Individual Files

This option sets a `ManagedAssembly` build property that enables building only some files in the project as managed code. You must set **Enable CLR Support for Individual Files** to **Yes** if some but not all of your project files are built as managed code. This property is only available in projects that use the v143 or later toolset in Visual Studio 2022 and later versions.

::: moniker-end
4 changes: 2 additions & 2 deletions docs/build/reference/fpcvt.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ In Visual Studio 2019 version 16.8 and later versions, the **`/fpcvt`** compiler

For Visual Studio 2019, the default behavior for x64 targets is consistent with **`/fpcvt:BC`** unless **`/arch:AVX512`** is specified. Usually, the behavior for x86 targets is consistent with **`/fpcvt:IA`**, except under **`/arch:IA32`**, **`/arch:SSE`**, or sometimes where the result of a function call is directly converted to an unsigned integer. Use of **`/fpcvt`** overrides the default, so all conversions are handled consistently on either target. The behavior of conversions for ARM and ARM64 targets isn't consistent with either **`/fpcvt:BC`** or **`/fpcvt:IA`**.

Standard C++ specifies that if a floating-point value can be truncated to a value that can be exactly represented in an integer type, conversion of that floating-point value to that integer type must return the truncated value. Otherwise, any behavior at all is allowed. Both **`/fpcvt`** options conform with Standard C++. The only difference is in what values are returned for invalid source values.
Standard C++ specifies that if a truncated floating-point value is exactly representable in an integer type, it must have that value when converted to that type. Otherwise, any behavior at all is allowed. Both **`/fpcvt`** options conform with Standard C++. The only difference is in what values are returned for invalid source values.

The **`/fpcvt:IA`** option causes any invalid conversion to return a single *sentinel* value, which is the destination value farthest from zero. For conversion to signed types, the sentinel is the minimum value for that type. Unsigned types use the maximum value. Floating-point operations may return a Not-a-Number (NaN) value to indicate an invalid operation. That's not an option for conversion to integer types, which don't have NaN values. The sentinel is used as a proxy for a NaN value, although it can also be the result of a valid conversion.
The **`/fpcvt:IA`** option causes any invalid conversion to return a single *sentinel* value, which is the destination value farthest from zero. For conversion to signed types, the sentinel is the minimum value for that type. Unsigned types use the maximum value. Floating-point operations may return a Not-a-Number (NaN) value to indicate an invalid operation. That indicator isn't an option for conversion to integer types, which don't have NaN values. The sentinel is used as a proxy for a NaN value, although it can also be the result of a valid conversion.

The **`/fpcvt:BC`** option also makes conversion to signed types return the minimum possible value when the source is invalid. However, conversion to unsigned integer types is based on conversion to **`long long`**. To convert a value to **`unsigned int`**, the compiler first converts it to type **`long long`**. The compiler then truncates the result to 32 bits. To convert a value to **`unsigned long long`**, valid source values that are too high for a **`long long`** are handled as a special case. All other values are first converted to **`long long`** and then recast to **`unsigned long long`**.

Expand Down
46 changes: 23 additions & 23 deletions docs/build/reference/manifest-tool-property-pages.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
---
description: "Learn more about: Manifest Tool Property Pages"
title: "Manifest Tool Property Pages"
ms.date: "07/24/2019"
ms.topic: "article"
ms.date: 11/30/2021
f1_keywords:
- VC.Project.VCManifestTool.SuppressStartupBanner
- VC.Project.VCManifestTool.VerboseOutput
Expand All @@ -24,37 +23,38 @@ f1_keywords:
- VC.Project.VCManifestTool.UpdateFileHashes
- VC.Project.VCManifestTool.UpdateFileHashesSearchPath
- vc.project.AdditionalOptionsPage
ms.assetid: f33499c4-7733-42d9-80e3-8a5018786965
---
# Manifest Tool Property Pages

Use these pages to specify general options for [Mt.exe](/windows/win32/sbscs/mt-exe). These pages are found under **Project** > **Properties** > **Configuration Properties** > **Manifest Tool**.
Use these pages to specify general options for [`Mt.exe`](/windows/win32/sbscs/mt-exe). These pages are found under **Project** > **Properties** > **Configuration Properties** > **Manifest Tool**.

## General Property Page

### Suppress Startup Banner

**Yes (/nologo)** specifies that standard Microsoft copyright data will be concealed when the manifest tool is started. Use this option to suppress unwanted output in log files, when you run mt.exe as part of a build process or from a build environment.
**Yes (`/nologo`)** specifies that standard Microsoft copyright data will be concealed when the manifest tool is started. Use this option to suppress unwanted output in log files when you run *`mt.exe`*, either as part of a build process or from a build environment.

### Verbose Output

**Yes (/verbose)** specifies that additional build information will be displayed during manifest generation.
**Yes (`/verbose`)** specifies that more build information will be displayed during manifest generation.

### Assembly Identity

Uses the /identity option to specify an identity string, which comprises the attributes for the [\<assemblyIdentity> Element](/visualstudio/deployment/assemblyidentity-element-clickonce-application). An identity string begins with the value for the `name` attribute, and is followed by *attribute* = *value* pairs. The attributes in an identity string are delimited by a comma.
Uses the **`/identity`** option to specify an identity string, which holds the attributes for the [`<assemblyIdentity>` element](/visualstudio/deployment/assemblyidentity-element-clickonce-application). An identity string begins with the value for the `name` attribute, and is followed by *attribute* = *value* pairs. The attributes in an identity string are delimited by a comma.

This is an example identity string: `Microsoft.Windows.Common-Controls, processorArchitecture=x86, version=6.0.0.0, type=win32, publicKeyToken=6595b64144ccf1df`
Here's an example identity string:

`Microsoft.Windows.Common-Controls, processorArchitecture=x86, version=6.0.0.0, type=win32, publicKeyToken=6595b64144ccf1df`

## Input and Output Property Page

### Additional Manifest Files

Uses the **/manifest** option to specify the full paths of additional manifest files that the manifest tool will process or merge. Full paths are delimited by a semicolon. (-manifest [manifest1] [manifest2] ...)
Uses the **`/manifest`** option to specify the full paths of more manifest files that the manifest tool will process or merge. Full paths are delimited by a semicolon. (`/manifest [manifest1] [manifest2] ...`)

### Input Resource Manifests

Uses the **/inputresource** option to specify the full path of a resource of type RT_MANIFEST, to input into the manifest tool. The path can be followed by the specified resource ID. For example:
Uses the **`/inputresource`** option to specify the full path of a resource of type `RT_MANIFEST`, to input into the manifest tool. The path can be followed by the specified resource ID. For example:

`dll_with_manifest.dll;#1`

Expand All @@ -66,31 +66,31 @@ Uses the **/inputresource** option to specify the full path of a resource of typ

### Output Manifest File

Specifies the name of the output manifest file. This property is optional when only one manifest file is operated upon by the manifest tool. (-out:[file];#[resource ID])
Specifies the name of the output manifest file. This property is optional when only one manifest file is operated upon by the manifest tool. (`/out:[file];#[resource ID]`)

### Manifest Resource File

Specifies the output resources file used to embed the manifest into the project output.

### Generate Catalog Files

Uses the **/makecdfs** option to specify that the manifest tool will generate catalog definition files (.cdf files), which are used to make catalogs. (/makecdfs)
Uses the **`/makecdfs`** option to specify that the manifest tool will generate catalog definition files (*`.cdf`* files), which are used to make catalogs. (`/makecdfs`)

### Generate Manifest From ManagedAssembly

Generates a manifest from a managed assembly. (-managedassemblyname:\[file])
Generates a manifest from a managed assembly. (`/managedassemblyname:[file]`)

### Suppress Dependency Element

Used with -managedassembly. suppresses the generation of dependency elements in the final manifest. (-nodependency)
Used with **`/managedassemblyname`**. Suppresses the generation of dependency elements in the final manifest. (`/nodependency`)

### Generate Category Tags

Used with -managedassembly. -category causes the category tags to be generated. (-category)
Used with **`/managedassemblyname`**. **`/category`** causes the category tags to be generated. (`/category`)

### DPI Awareness

Specifies whether the application is DPI-aware. By default, the setting is **Yes** for MFC projects and **No** otherwise because only MFC projects have built in DPI awareness. You can override the setting to **Yes** if you add code to handle different DPI settings. Your application might appear fuzzy or small if you set it as DPI-aware when it is not.
Specifies whether the application is DPI-aware. By default, the setting is **Yes** for MFC projects and **No** otherwise because only MFC projects have built in DPI awareness. You can override the setting to **Yes** if you add code to handle different DPI settings. Your application might appear fuzzy or small if it isn't DPI-aware, but you set a DPI-aware option.

**Choices**

Expand All @@ -100,37 +100,37 @@ Specifies whether the application is DPI-aware. By default, the setting is **Yes

## Isolated COM Property Page

For more information about isolated COM, see [Isolated Applications](/windows/win32/SbsCs/isolated-applications) and [How to: Build Isolated Applications to Consume COM Components](../how-to-build-isolated-applications-to-consume-com-components.md).
For more information about isolated COM, see [Isolated applications](/windows/win32/SbsCs/isolated-applications) and [How to: Build isolated applications to consume COM components](../how-to-build-isolated-applications-to-consume-com-components.md).

### Type Library File

Specifies the type library to use for regfree COM manifest support. (-tlb:[file])
Specifies the type library to use for regfree COM manifest support. (`/tlb:[file]`)

### Registrar Script File

Specifies the registrar script file to use for regfree COM manifest support. (-rgs:[file])
Specifies the registrar script file to use for regfree COM manifest support. (`/rgs:[file]`)

### Component File Name

Specifies the file name of the component that is built from the .tlb or .rgs specified. (-dll:[file])
Specifies the file name of the component that is built from the .tlb or .rgs specified. (`/dll:[file]`)

### Replacements File

Specifies the file that contains values for replaceable strings in the RGS file. (replacements:[file])
Specifies the file that contains values for replaceable strings in the RGS file. (`/replacements:[file]`)

## Advanced Property Page

### Update File Hashes

Computes the hash of files specified in the file elements and updates the hash attribute with this value. (hashupdate:[path])
Computes the hash of files specified in the `file` elements, and then updates the hash attribute with this value. (`/hashupdate:[path]`)

### Update File Hashes Search Path

Specifies the search path to use when updating the file hashes.

### Additional Options

Additional Options
Allows you to specify more options.

## See also

Expand Down
65 changes: 31 additions & 34 deletions docs/cpp/expressions-with-unary-operators.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,66 +9,63 @@ ms.assetid: 1217685b-b85d-4b48-9ff4-d90f56a26c1b

Unary operators act on only one operand in an expression. The unary operators are as follows:

- [Indirection operator (*)](../cpp/indirection-operator-star.md)
- [Indirection operator (`*`)](../cpp/indirection-operator-star.md)

- [Address-of operator (&)](../cpp/address-of-operator-amp.md)
- [Address-of operator (`&`)](../cpp/address-of-operator-amp.md)

- [Unary plus operator (+)](../cpp/unary-plus-and-negation-operators-plus-and.md)
- [Unary plus operator (`+`)](../cpp/unary-plus-and-negation-operators-plus-and.md)

- [Unary negation operator (-)](../cpp/unary-plus-and-negation-operators-plus-and.md)
- [Unary negation operator (`-`)](../cpp/unary-plus-and-negation-operators-plus-and.md)

- [Logical negation operator (!)](../cpp/logical-negation-operator-exclpt.md)
- [Logical negation operator (`!`)](../cpp/logical-negation-operator-exclpt.md)

- [One's complement operator (~)](../cpp/one-s-complement-operator-tilde.md)
- [One's complement operator (`~`)](../cpp/one-s-complement-operator-tilde.md)

- [Prefix increment operator (++)](../cpp/prefix-increment-and-decrement-operators-increment-and-decrement.md)
- [Prefix increment operator (`++`)](../cpp/prefix-increment-and-decrement-operators-increment-and-decrement.md)

- [Prefix decrement operator (--)](../cpp/prefix-increment-and-decrement-operators-increment-and-decrement.md)
- [Prefix decrement operator (`--`)](../cpp/prefix-increment-and-decrement-operators-increment-and-decrement.md)

- [Cast operator ()](../cpp/cast-operator-parens.md)

- [`sizeof` operator](../cpp/sizeof-operator.md)

- [`__uuidof` operator](../cpp/uuidof-operator.md)

- [`alignof` operator](../cpp/alignof-operator.md)

- [`noexcept` expression](../cpp/noexcept-cpp.md)

- [`new` operator](../cpp/new-operator-cpp.md)

- [`delete` operator](../cpp/delete-operator-cpp.md)

These operators have right-to-left associativity. Unary expressions generally involve syntax that precedes a postfix or primary expression.

The following are the possible forms of unary expressions.

- *postfix-expression*

- `++` *unary-expression*

- `--` *unary-expression*

- *unary-operator* *cast-expression*

- **`sizeof`** *unary-expression*

- `sizeof(` *type-name* `)`

- `decltype(` *expression* `)`

- *allocation-expression*
## Syntax

- *deallocation-expression*
*`unary-expression`*:\
&emsp; *`postfix-expression`*\
&emsp; **`++`** *`cast-expression`*\
&emsp; **`--`** *`cast-expression`*\
&emsp; *`unary-operator`* *`cast-expression`*\
&emsp; **`sizeof`** *`unary-expression`*\
&emsp; **`sizeof`** **`(`** *`type-id`* **`)`**\
&emsp; **`sizeof`** **`...`** **`(`** *`identifier`* **`)`**\
&emsp; **`alignof`** **`(`** *`type-id`* **`)`**\
&emsp; *`noexcept-expression`*\
&emsp; *`new-expression`*\
&emsp; *`delete-expression`*\
*`unary-operator`*: one of\
&emsp; **`*`** **`&`** **`+`** **`-`** **`!`** **`~`**

Any *postfix-expression* is considered a *unary-expression*, and because any primary expression is considered a *postfix-expression*, any primary expressions is considered a *unary-expression* also. For more information, see [Postfix Expressions](../cpp/postfix-expressions.md) and [Primary Expressions](../cpp/primary-expressions.md).
## Remarks

A *unary-operator* consists of one or more of the following symbols: `* & + - ! ~`
Any *`postfix-expression`* is considered a *`unary-expression`*, and because any *`primary-expression`* is considered a *`postfix-expression`*, any *`primary-expression`* is considered a *`unary-expression`* also. For more information, see [Postfix expressions](../cpp/postfix-expressions.md) and [Primary expressions](../cpp/primary-expressions.md).

The *cast-expression* is a unary expression with an optional cast to change the type. For more information see [Cast Operator: ()](../cpp/cast-operator-parens.md).
The *`cast-expression`* is a *`unary-expression`* with an optional cast to change the type. For more information, see [Cast operator: `()`](../cpp/cast-operator-parens.md).

An *expression* can be any expression. For more information, see [Expressions](../cpp/expressions-cpp.md).
The *`noexcept-expression`* is a *`noexcept-specifier`* with a *`constant-expression`* argument. For more information, see [`noexcept`](../cpp/noexcept-cpp.md).

The *allocation-expression* refers to the **`new`** operator. The *deallocation-expression* refers to the **`delete`** operator. For more information, see the links earlier in this topic.
The *`new-expression`* refers to the **`new`** operator. The *`delete-expression`* refers to the **`delete`** operator. For more information, see [`new` operator](../cpp/new-operator-cpp.md) and [`delete` operator](../cpp/delete-operator-cpp.md).

## See also

[Types of Expressions](../cpp/types-of-expressions.md)
[Types of expressions](../cpp/types-of-expressions.md)
Loading