Симптомы

При попытке объявить шаблон функции variadic как дружественная шаблона класса компилятор C++ вернет сообщение об ошибке, чтобы не принимать в коде. Например, если сделать следующее объявление:

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{};
};

Может появиться следующее сообщение об ошибке:

Ошибка C2783: «void f (C < типы >, < U > B)»: не удалось вывести аргумент шаблона для «U»

Причина

Причина заключается в том, что компилятор C++ не может соответствовать объявление дружественной функции существующему объявлению.

Решение

Это обновление можно загрузить из Центра загрузки Майкрософт.

Центр загрузки Майкрософт

Для получения дополнительных сведений о том, как скачать файлы поддержки Майкрософт, щелкните следующий номер статьи базы знаний Майкрософт.

119591 Как загрузить файлы поддержки Microsoft через веб-службы

Корпорация Майкрософт проверила этот файл на наличие вирусов. Корпорация Майкрософт использует последнее антивирусное программное обеспечение, доступное на период публикации файла. Файл хранится на защищенных серверах, что предотвращает его несанкционированное изменение.

Предварительные условия

Это исправление требуется Visual Studio 2015 обновления 3.

Сведения о перезагрузке компьютера

Может потребоваться перезагрузить компьютер после установки данного исправления.

Сведения о замене

Это исправление не заменяет все ранее выпущенные исправления.

Сведения о файлах

Английская версия данного исправления содержит атрибуты файла (или более поздние атрибуты файлов), приведенные в следующей таблице. Дата и время для этих файлов указаны в формате общего скоординированного времени (UTC). При просмотре сведений о файле, он преобразуется в локальное время. Чтобы узнать разницу между временем по Гринвичу и местным временем, откройте вкладку Часовой пояс элемента Дата и время в панели управления.

Имя файла

Версия файла

Размер файла

Дата

Время

Платформа

VC14-KB4096429.exe

14.0.24240

19,177,304

04/19/2018

02:32 AM

X86

Временное решение

Чтобы обойти эту проблему, не объявлять variadic функции шаблон как дружественная шаблона класса.

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

В сообществах можно задавать вопросы и отвечать на них, отправлять отзывы и консультироваться с экспертами разных профилей.