C++-Compilerfehler, wenn Sie Variadic-Vorlagen und Friend-Funktionen kombinieren
Symptome
Wenn Sie versuchen, eine Variadic-Funktionsvorlage als Freund einer Klassenvorlage zu deklarieren, gibt der C++-Compiler eine Fehlermeldung zurück, anstatt den Code zu akzeptieren. Wenn Sie beispielsweise die folgende Deklaration durchführen:
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{}; };
Möglicherweise erhalten Sie die folgende Fehlermeldung:
Fehler C2783: „void f(C<Types...>,B<U>)": Vorlagenargument für „U" konnte nicht abgeleitet werden.
Ursache
Die Ursache liegt darin, dass der C++-Compiler die Deklaration der Friend-Funktion nicht mit einer vorhandenen Deklaration abgleichen kann.
Auflösung
Dieses Update ist im Microsoft Download Center verfügbar.
Microsoft Download Center
Für weitere Informationen zum Herunterladen von Microsoft-Supportdateien klicken Sie auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:
119591 So erhalten Sie Microsoft-Supportdateien von Onlinediensten
Microsoft hat diese Datei auf Viren überprüft. Microsoft verwendete die aktuellste Virenerkennungssoftware, die zum Zeitpunkt der Veröffentlichung der Datei verfügbar war. Die Datei wird auf Servern mit erhöhter Sicherheit gespeichert, die dazu beitragen, unbefugte Änderungen an der Datei zu verhindern.
Voraussetzungen
Für diesen Hotfix ist Visual Studio 2015 Update 3 erforderlich.
Informationen zum Neustart
Möglicherweise müssen Sie den Computer neu starten, nachdem Sie diesen Hotfix angewendet haben.
Informationen zum Ersatz
Dieser Hotfix ersetzt keine zuvor veröffentlichten Hotfixes.
Dateiinformationen
Die englische Version dieses Hotfixes verfügt über die Dateiattribute (oder spätere Dateiattribute), die in der folgenden Tabelle aufgeführt sind. Die Datums- und Uhrzeitangaben für diese Dateien werden in der koordinierten Weltzeit (UTC) angegeben. Wenn Sie die Dateiinformationen anzeigen, werden diese in die Ortszeit konvertiert. Um den Unterschied zwischen UTC und Ortszeit zu ermitteln, verwenden Sie die Registerkarte „Zeitzone" im Element „Datum und Uhrzeit" in der Systemsteuerung.
Dateiname | Dateiversion | Dateigröße | Datum | Zeit | Plattform |
VC14-KB4096429.exe | 14.0.24240 | 19.177.304 | 19.04.2018 | 02:32 Uhr | X86 |
Problemumgehung
Um dieses Problem zu umgehen, deklarieren Sie die variadic-Funktionsvorlage nicht als Freund einer Klassenvorlage.
No comments:
Post a Comment