Objawy
Podczas próby zadeklarowania szablonu funkcji wariancji jako przyjaciela szablonu klasy, kompilator języka C++ zwróci komunikat o błędzie zamiast zaakceptować kod. Na przykład po wykonaniu następującej deklaracji:
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{};
};
Może zostać wyświetlony następujący komunikat o błędzie:
Uwaga
błąd C2783: "void f(<C Types...>,B<U>)": nie można wydedukować szablonu argumentu dla "U"
Przyczyna
Przyczyną jest to, że kompilator języka C++ nie może dopasować deklaracji funkcji friend do istniejącej deklaracji.
Rozwiązanie
Ta aktualizacja jest dostępna w Centrum pobierania Microsoft.
Centrum pobierania Microsoft
Aby uzyskać więcej informacji dotyczących sposobów pobierania plików pomocy technicznej firmy Microsoft, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Baza wiedzy Microsoft Knowledge Base:
119591 Jak uzyskać pliki pomocnicze firmy Microsoft w usłudze Usługi online
Firma Microsoft przeskanowała ten plik w poszukiwaniu wirusów. Firma Microsoft użyła najnowszego oprogramowania do wykrywania wirusów, które było dostępne w dniu opublikowania pliku. Plik jest przechowywany na serwerach z rozszerzonymi zabezpieczeniami, które pomagają zapobiegać nieautoryzowanym zmianom w pliku.
Wymagania wstępne
Ta poprawka wymaga aktualizacji Visual Studio 2015 Update 3.
Informacje o ponownym uruchamianiu
Po zastosowaniu tej poprawki może być konieczne ponowne uruchomienie komputera.
Informacje o wymianie
Ta poprawka nie zastępuje żadnej wcześniej wydanej poprawki.
Informacje o plikach
Angielska wersja tej poprawki ma atrybuty pliku (lub nowsze atrybuty pliku) wymienione w poniższej tabeli. Daty i godziny dla tych plików są wyświetlane według uniwersalnego czasu koordynowanego (UTC). Informacje o pliku są konwertowane na czas lokalny. Aby znaleźć różnicę między czasem UTC a czasem lokalnym, użyj karty Strefa czasowa w elemencie Data i godzina w Panelu sterowania.
| Nazwa pliku | Wersja pliku | Rozmiar pliku | Data | Godzina | Platforma |
|---|---|---|---|---|---|
| VC14-KB4096429.exe | 14.0.24240 | 19,177,304 | 04/19/2018 | 02:32 | X86 |
Obejście
Aby obejść ten problem, nie należy deklarować szablonu funkcji wariancji jako znajomego szablonu klasy.