/Zc:lambda (更新されたラムダ プロセッサを有効にする)

/Zc:lambda コンパイラ オプションを使用すると、準拠するラムダの文法および処理サポートを有効にすることができます。

構文

/Zc:lambda[-]

解説

/Zc:lambda コンパイラ オプションでは、準拠するラムダ プロセッサを有効にします。 これは、C++ 標準に従ってラムダ コードを解析して実装します。 このオプションは既定ではオフになっており、その場合、従来のラムダ プロセッサが使用されます。 このオプションを使用すると、既定の /std:c++14 または /std:c++17 コンパイラ オプションを使用する場合に、汎用ラムダの準拠モードの構文チェックを有効にできます。

/Zc:lambdaは、[] (std-specify-language-standard-version.md)/permissive-、および/experimental:moduleオプションによって/std:c++20/std:c++latest自動的に有効になります。 /Zc:lambda- を使用して、明示的に無効にすることができます。

/Zc:lambda オプションは、Visual Studio 2019 バージョン 16.8 以降で使用できます。 Visual Studio 2019 バージョン 16.3 以降では /experimental:newLambdaProcessor として使用できますが、このスペルは非推奨となりました。

従来のラムダ プロセッサは、ラムダを解析およびコンパイルするときに制限があります。 たとえば、次の準拠コードは /Zc:lambda で正しくコンパイルされますが、/Zc:lambda- ではエラーが報告されます。

void f1() 
{
    constexpr auto c_value = 1;
    auto func = []()
    {
        return c_value; // error C3493: 'c_value' cannot be implicitly captured
                        // because no default capture mode has been specified
    };
    func(); // error C2064: term does not evaluate to a function taking 0 arguments
}

従来のラムダ プロセッサの場合、このコードは警告なしでコンパイルされますが、新しいラムダ プロセッサの場合はエラー C2760 が発生します。

void f2() {
    auto a = [](auto arg) {
        decltype(arg)::Type t; // C2760 syntax error: unexpected token 'identifier', expected ';'
    };
}

次の例は、/Zc:lambda を指定したコンパイラによって強制されるようになった正しい構文を示しています。

void f3() {
    auto a = [](auto arg) {
        typename decltype(arg)::Type t;
    };
}

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

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

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

  3. /Zc:lambda または /Zc:lambda-[追加オプション] ペインに追加します。

関連項目

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