다음을 통해 공유


/Zc:lambda (업데이트된 람다 프로세서 사용)

/Zc:lambda 컴파일러 옵션을 사용하면 람다 문법 및 처리 지원을 준수할 수 있습니다.

구문

/Zc:lambda[-]

설명

/Zc:lambda 컴파일러 옵션을 사용하면 람다 프로세서를 준수할 수 있습니다. C++ 표준에 따라 람다 코드를 구문 분석하고 구현합니다. 이 옵션은 레거시 람다 프로세서를 사용하는 기본적으로 꺼져 있습니다. 기본 /std:c++14 값 또는 /std:c++17 컴파일러 옵션을 사용할 때 제네릭 람다의 규칙 모드 구문 검사를 사용하도록 설정하려면 이 옵션을 사용합니다.

/Zc:lambda은 ,[/std:c++latest](std-specify-language-standard-version.md) /permissive-/experimental:module 옵션에 의해 /std:c++20자동으로 사용하도록 설정됩니다. 를 사용하여 /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(언어 표준 버전 지정)