/Zc:templateScope (テンプレート パラメーターのシャドウを確認する)

/Zc:templateScope コンパイラ オプションを使用すると、テンプレート パラメーターのシャドウに関する標準 C++ の動作を確認できます。

構文

/Zc:templateScope[-]

解説

C++ 標準では、テンプレートのスコープ内の別の宣言に対してテンプレート パラメーターの名前 (または 表示) を再利用することはできません。 /Zc:templateScope コンパイラ オプションを使用すると、このようなシャドウのエラー チェックが有効になります。

/Zc:templateScope オプションは、Visual Studio 2022 バージョン 17.5 プレビュー 1 の新機能です。 このオプションは、/permissive- オプション (または/std:c++20/std:c++latestなど、/permissive-を意味するオプション) を使用してコードがコンパイルされている場合でも、既定ではオフになっています。 エラー チェックを有効にするには、コンパイラのコマンド ラインに /Zc:templateScope を明示的に追加する必要があります。 チェックを明示的に無効にするには、 /Zc:templateScope- オプションを使用します。

/Zc:templateScopeでは、次のサンプル コードでエラーが発生します。

template<typename T>
void f(T&& t) {
    int T = 13;
}

/* Output:
t.cpp(3): error C7527: 'T': a template parameter name cannot be reused within its scope
*/

このコンパイラ オプションを Visual Studio で使用するには

  1. プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。

  2. [構成プロパティ]>[C/C++]>[コマンド ライン] プロパティ ページを選択します。

  3. [追加のオプション] で、/Zc:templateScope または /Zc:templateScope- を追加します。 [OK] または [適用] を選択して、変更内容を保存します。

関連項目

/Zc (準拠)
/permissive-
/std (言語の標準バージョンの指定)