Sintomi
Quando si tenta di dichiarare un template di funzione variadic come friend template di classe, il compilatore C++ restituirebbe un messaggio di errore anziché accettare il codice. Ad esempio, quando si esegue la seguente dichiarazione:
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{};
};
Si potrebbe ricevere il seguente messaggio di errore:
errore C2783: 'void f (C < tipi >, < U > B)': Impossibile dedurre un argomento di template per 'U'
Causa
La causa è che il compilatore C++ non può corrispondere alla dichiarazione di funzione friend di una dichiarazione esistente.
Risoluzione
Questo aggiornamento è disponibile dall' Area Download Microsoft.
Area Download Microsoft
Per ulteriori informazioni su come scaricare i file di supporto Microsoft, fare clic sul seguente numero di articolo per visualizzare l'articolo della Microsoft Knowledge Base:
119591 Come ottenere file di supporto Microsoft dai servizi online
Microsoft ha analizzato questo file per individuare eventuali virus. Microsoft ha utilizzato il software antivirus più recente disponibile alla data in cui il file è stato registrato. Il file è archiviato in un server con protezione avanzata che impedisce modifiche non autorizzate al file.
Prerequisiti
Questo hotfix richiede Visual Studio 2015 Update 3.
Informazioni sul riavvio
Potrebbe essere necessario riavviare il computer dopo avere applicato questo hotfix.
Informazioni sulla sostituzione
Questo hotfix non sostituisce eventuali hotfix precedentemente rilasciato.
Informazioni sui file
La versione inglese di questo hotfix presenta gli attributi di file (o attributi successivi) elencati nella tabella riportata di seguito. Le date e ore dei file sono elencate in base al formato UTC (Coordinated Universal Time Coordinated). Quando si visualizzano le informazioni sul file, viene convertito in ora locale. Per calcolare la differenza tra ora UTC e ora locale, utilizzare la scheda fuso orario nell'elemento di Data e ora nel Pannello di controllo.
Nome del file |
Versione del file |
Dimensione del file |
Data |
Ora |
Piattaforma |
VC14-KB4096429.exe |
14.0.24240 |
19,177,304 |
04/19/2018 |
02:32 AM |
X86 |
Soluzione alternativa
Per risolvere questo problema, non dichiarare variadic funzione modello come friend template di classe.