Compartir a través de


/Zc:lambda (Habilitación del procesador lambda actualizado)

La opción del compilador /Zc:lambda habilita la compatibilidad con la gramática lambda y el procesamiento.

Sintaxis

/Zc:lambda[-]

Comentarios

La opción del compilador /Zc:lambda habilita el procesador lambda conforme. Analiza e implementa código lambda según el estándar de C++. Esta opción está desactivada de forma predeterminada, que usa el procesador lambda heredado. Use esta opción para habilitar comprobaciones de sintaxis en modo de conformidad de expresiones lambda genéricas cuando se usan las opciones predeterminadas /std:c++14 o /std:c++17 del compilador.

/Zc:lambda se habilita automáticamente mediante las /std:c++20opciones , [/std:c++latest] (std-specify-language-standard-version.md), /permissive-y /experimental:module . Puede deshabilitarlo explícitamente mediante /Zc:lambda-.

La opción /Zc:lambda está disponible a partir de la versión 16.8 de Visual Studio 2019. Está disponible como /experimental:newLambdaProcessor partir de la versión 16.3 de Visual Studio 2019, pero esta ortografía ya está en desuso.

El procesador lambda heredado tiene limitaciones cuando analiza y compila lambdas. Por ejemplo, este código conforme se compila correctamente en /Zc:lambda, pero notifica errores en /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
}

El procesador lambda heredado compila este ejemplo sin advertencias, pero el nuevo procesador lambda genera el error C2760:

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

En el siguiente ejemplo se muestra la sintaxis correcta, que ahora aplica el compilador en /Zc:lambda:

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

Para establecer esta opción del compilador en Visual Studio

  1. Abra el cuadro de diálogo Páginas de propiedades del proyecto. Para más información, vea Establecimiento del compilador de C++ y de propiedades de compilación en Visual Studio.

  2. Seleccione la página de propiedades Propiedades de configuración>C/C++>Línea de comandos.

  3. Agregue /Zc:lambda o /Zc:lambda- al panel Opciones adicionales.

Consulte también

/Zc (Conformidad)
/std (Especificar la versión estándar del lenguaje)