/Zc:referenceBinding (Aplicar reglas enlace de referencias)
Cuando se especifica la opción /Zc:referenceBinding, el compilador no permite que una referencia lvalue no constante se enlace a un valor temporal.
Sintaxis
/Zc:referenceBinding[-]
Comentarios
Si se especifica /Zc:referenceBinding, el compilador sigue la sección 8.5.3 del estándar de C++11: no permite expresiones que enlacen un tipo definido por el usuario temporal a una referencia lvalue no constante. De forma predeterminada, o si se especifica /Zc:referenceBinding, el compilador permite estas expresiones como una extensión de Microsoft, pero se emite una advertencia de nivel 4. Por seguridad, portabilidad y conformidad del código, se recomienda usar /Zc:referenceBinding.
La opción /Zc:referenceBinding está desactivada de forma predeterminada. La opción del compilador /permissive- establece implícitamente esta opción, pero se puede invalidar mediante /Zc:referenceBinding-.
Ejemplo
En este ejemplo se muestra la extensión de Microsoft que permite enlazar un elemento temporal de un tipo definido por el usuario a una referencia lvalue no constante.
// zcreferencebinding.cpp
struct S {
};
void f(S&) {
}
S g() {
return S{};
}
int main() {
S& s = g(); // warning C4239 at /W4
const S& cs = g(); // okay, bound to const ref
f(g()); // Extension: error C2664 only if /Zc:referenceBinding
}
Para obtener más información sobre los problemas de conformidad de Visual C++, vea Nonstandard Behavior.
Para establecer esta opción del compilador en el entorno de desarrollo de Visual Studio
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.
Seleccione la página de propiedades Propiedades de configuración>C/C++>Línea de comandos.
Modifique la propiedad Opciones adicionales para incluir /Zc:twoPhase- y, luego, elija Aceptar.
Consulte también
Opciones del compilador de MSVC
Sintaxis de la línea de comandos del compilador MSVC
/Zc (Ajuste)