/Zc:templateScope
(Verifique o sombreamento do parâmetro do modelo)
A /Zc:templateScope
opção do compilador permite verificações do comportamento padrão do C++ em torno do sombreamento de parâmetros de modelo.
Sintaxe
/Zc:templateScope
[-
]
Comentários
O padrão C++ não permite a reutilização do nome (ou sombreamento) de um parâmetro de modelo para outra declaração dentro do escopo do modelo. A /Zc:templateScope
opção do compilador habilita uma verificação de erro para esse sombreamento.
A /Zc:templateScope
opção é nova no Visual Studio 2022 versão 17.5 versão prévia 1. A opção está desativada por padrão, mesmo quando o código é compilado usando a /permissive-
opção (ou uma opção que implica /permissive-
, como /std:c++20
ou /std:c++latest
). Para habilitar a verificação de erros, você deve adicionar /Zc:templateScope
explicitamente à linha de comando do compilador. Para desativar explicitamente a verificação, use a /Zc:templateScope-
opção.
Exemplo
Em /Zc:templateScope
, este código de exemplo produz um erro:
template<typename T>
void f(T&& t) {
int T = 13;
}
/* Output:
t.cpp(3): error C7527: 'T': a template parameter name cannot be reused within its scope
*/
Para definir essa opção do compilador no 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.
Em Opções adicionais, adicione
/Zc:templateScope
ou/Zc:templateScope-
. Escolha OK ou Aplicar para salvar as alterações.
Confira também
/Zc
(Conformidade)
/permissive-
/std
(Especificar a versão padrão da linguagem)