/Zc:referenceBinding (Impor regras de associação de referência)
Quando a opção /Zc:referenceBinding é especificada, o compilador não permite que uma referência lvalue não constante seja associada a um temporário.
Sintaxe
/Zc:referenceBinding[-]
Comentários
Se /Zc:referenceBinding for especificado, o compilador seguirá a seção 8.5.3 do padrão C++11: ele não permitirá expressões que associam um tipo definido pelo usuário temporário a uma referência lvalue não constante. Por padrão, ou se /Zc:referenceBinding- for especificado, o compilador permitirá expressões como uma extensão da Microsoft, mas um aviso de nível 4 será emitido. Para segurança de código, portabilidade e conformidade, recomendamos que você use /Zc:referenceBinding.
A opção /Zc:referenceBinding está desativada por padrão. A opção do compilador /permissive- define implicitamente essa opção, mas ela pode ser substituída usando /Zc:referenceBinding-.
Exemplo
Este exemplo mostra a extensão da Microsoft que permite que um temporário de um tipo definido pelo usuário seja associado a uma referência lvalue não 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 obter mais informações sobre problemas de conformidade no Visual C++, confira Comportamento fora do padrão.
Para definir esta opção do compilador no ambiente de desenvolvimento do Visual Studio
Abra a caixa de diálogo Páginas de Propriedades do projeto. Para obter detalhes, confira Definir as propriedades de build e do compilador do C++ no Visual Studio.
Selecione a página de propriedades Propriedades de Configuração>C/C++>Linha de Comando.
Modifique a propriedade Opções Adicionais para incluir /Zc:referenceBinding e escolha OK.
Confira também
Opções do compilador MSVC
Sintaxe da linha de comando do compilador MSVC
/Zc (conformidade)