Objawy
Podczas deklarowania funkcji zmienne szablonu jako znajomego szablonu klasy, kompilator języka C++ zwróci komunikat o błędzie zamiast akceptować kod. Na przykład po wykonaniu następującą deklarację:
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:
Błąd C2783: "void f (C < typów... >, < U > B)": nie można wywnioskować, argument szablonu dla 'U'
Przyczyna
Przyczyną jest to, że kompilator języka C++ nie może dopasować deklaracji funkcji zaprzyjaźnionej do istniejącej deklaracji.
Rozwiązanie
Ta aktualizacja jest dostępna w Centrum pobierania firmy Microsoft.
Centrum pobierania firmy Microsoft
Aby uzyskać więcej informacji dotyczących sposobu pobierania plików pomocy technicznej firmy Microsoft, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
119591 Jak uzyskać pliki pomocy technicznej Microsoft w usługach online
Firma Microsoft przeskanowała 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 o podwyższonych zabezpieczeniach, które uniemożliwiają nieautoryzowane zmiany w pliku.
Wymagania wstępne
Ta poprawka wymaga programu Visual Studio 2015 aktualizacji 3.
Informacje dotyczące ponownego uruchamiania
Może być konieczne ponowne uruchomienie komputera po zastosowaniu tej poprawki.
Informacje o zastępowaniu
Ta poprawka nie zastępuje żadnych wcześniej wydanych poprawek.
Informacje o plikach
Wersja anglojęzyczna tej poprawki ma atrybuty plików (lub nowsze) wymienione w poniższej tabeli. Daty i godziny odpowiadające tym plikom zostały podane w formacie uniwersalnego czasu koordynowanego (UTC, Coordinated Universal Time). Po wyświetleniu informacji o pliku są konwertowane na czas lokalny. Aby zobaczyć różnicę między czasem UTC i czasem lokalnym, należy użyć z karty Strefa czasowa w aplecie 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 AM |
X86 |
Obejście problemu
Aby obejść ten problem, nie deklarować zmienne funkcji szablonu jako znajomego szablonu klasy.