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.