Erro de compilador C++ quando você misturar modelos de variadic e função de amigo

Sintomas

Quando você tentar declarar um modelo de função variadic como um amigo de um modelo de classe, o compilador C++ retornará uma mensagem de erro em vez de aceitar o código. Por exemplo, quando você faz a seguinte declaração:

template<typename T>
struct B { };

template<typename... Types>
struct C { };

template<typename... Types, typename U>
void f(C<Types...>, B<U>)
{
}

template<typename T>
class A {
	template<typename... Types, typename U>
	friend void f(C<Types...>, B<U>);
};

int main()
{
    f(C<int>{}, B<int>{});
    A<int> a{};
};

Você pode receber a seguinte mensagem de erro:

Erro C2783: 'void f (C < tipos... >, < U > B)': não foi possível deduzir o argumento de modelo para 'U'

Causa

O motivo é que o compilador C++ não pode corresponder a declaração da função amigo para uma declaração existente.

Resolução

Esta atualização está disponível no Centro de Download da Microsoft.

Centro de Download da Microsoft

Para obter mais informações sobre como baixar arquivos de suporte da Microsoft, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento da Microsoft:

119591 Como obter arquivos de compatibilidade da Microsoft nos serviços online

A Microsoft examinou esse arquivo em busca de vírus. A Microsoft usou o software de detecção de vírus mais recente que estava disponível na data em que o arquivo foi publicado. O arquivo está armazenado em servidores com segurança avançada que ajudam a evitar qualquer alteração não autorizada no arquivo.

Pré-requisitos:

Esse hotfix requer o Visual Studio 2015 atualização 3.

Informações sobre reinicialização

Você terá que reiniciar o computador após aplicar esse hotfix.

Informações sobre substituição

Esse hotfix não substitui nenhum hotfix lançado anteriormente.

Informações sobre o arquivo:

A versão em inglês deste hotfix possui os atributos de arquivo (ou atributos de arquivo posteriores) listados na tabela a seguir. As datas e horas desses arquivos estão listadas na Hora Universal Coordenada (UTC). Quando você exibe as informações do arquivo, ele é convertido para a hora local. Para localizar a diferença entre o UTC e a hora local, use a guia Fuso Horário no item Data e Hora no Painel de Controle.

Nome do Arquivo

Versão do arquivo

Tamanho do arquivo

Data

Hora

Plataforma

VC14-KB4096429.exe

14.0.24240

19,177,304

04/19/2018

02:32 AM

X86

Solução alternativa

Para contornar esse problema, não declarar o variadic função modelo como um amigo de um modelo de classe.

Precisa de mais ajuda?

Expanda suas habilidades
Explore o treinamento
Obtenha novos recursos primeiro
Ingressar no Microsoft Insider

Estas informações foram úteis?

Obrigado por seus comentários!

Agradecemos pelos seus comentários! Parece que pode ser útil conectar você a um de nossos agentes de suporte do Office.

×