"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que o Microsoft Visual C ++ falha ao implementar corretamente a instanciação do modelo bifásico?

Por que o Microsoft Visual C ++ falha ao implementar corretamente a instanciação do modelo bifásico?

Postado em 2025-04-09
Navegar:673

Why Does Microsoft Visual C   Fail to Correctly Implement Two-Phase Template Instantiation?

O mistério do modelo de duas fases "quebrado" bifásia instanciação no Microsoft Visual C

Declaração de Problema: STRAGLES

Os usuários comumente expressam as preocupações da Microsoft visual C (msvc). Quais aspectos específicos do mecanismo não operam como esperado? No entanto, surgem dúvidas sobre se essa verificação verifica se os nomes utilizados nos modelos são declarados adequadamente. Ele não verifica a presença de nomes declarados, levando a problemas de compilação quando os nomes não têm declarações adequadas. modelo struct s { S () {int i = foo (0); } }; void foo (int); int main () { S s; }

Um compilador compatível com padrão resolveria a chamada Foo (0) durante a primeira fase e a vincularia a Foo (void*). No entanto, o MSVC adia esse processo para a segunda fase, vinculando incorretamente Foo (0) a Foo (int) e resultando em um erro. fase. struct s {}; } barra vazia (void *) {} modelo & lt; typename t & gt; void foo (t *t) { bar (t); } barra vazia (n :: s *s) {} int main () { N :: s; foo (& amp; s); } Em ambos os casos, o comportamento da MSVC contraria a separação especificada entre a primeira e a segunda fases da instanciação do modelo. Esta implementação incorreta persiste no Visual Studio 2015.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3