Síntomas
Cuando se intenta declarar una plantilla de función variadic como amigo de una plantilla de clase, el compilador de C++ devolverá un mensaje de error en lugar de aceptar el código. Por ejemplo, al hacer la siguiente declaración:
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{};
};
Puede recibir el siguiente mensaje de error:
Error C2783: 'void f (C < tipos... >, B < U >)': no se pudo deducir el argumento de plantilla para 'U'
Causa
La causa es que el compilador de C++ no puede coincidir con la declaración de la función friend con una declaración existente.
Solución
Esta actualización está disponible desde el Centro de descarga de Microsoft.
Centro de descarga de Microsoft
Para obtener más información acerca de cómo descargar archivos de soporte técnico de Microsoft, haga clic en el número de artículo siguiente para ver el artículo en Microsoft Knowledge Base:
119591 Obtención de archivos de soporte técnico de Microsoft desde los servicios en línea
Microsoft analizó este archivo en busca de virus. Microsoft ha utilizado el software de detección de virus más reciente que estaba disponible en la fecha en que se publicó el archivo. El archivo se almacena en servidores seguros que ayudan a evitar cambios no autorizados en el archivo.
Requisitos previos
Esta revisión requiere Visual Studio 2015 actualización 3.
Información de reinicio
Tendrá que reiniciar el equipo después de aplicar este hotfix.
Información de reemplazo
Esta revisión no sustituye cualquier revisión lanzada anteriormente.
Información de archivo
La versión en inglés de esta revisión tiene los atributos de archivo (o atributos del archivo más reciente) mostrados en la tabla siguiente. Las fechas y horas de estos archivos se muestran en la hora Universal coordinada (UTC). Al ver la información del archivo, se convierte en hora local. Para encontrar la diferencia entre la hora UTC y la hora local, utilice la ficha Zona horaria en el elemento de Fecha y hora del Panel de control.
Nombre del archivo |
Versión del archivo |
Tamaño de archivo |
Fecha |
Hora |
Plataforma |
VC14-KB4096429.exe |
14.0.24240 |
19,177,304 |
04/19/2018 |
02:32 A.M. |
X86 |
Solución alternativa
Para evitar este problema, no declare el variadic función plantilla como amigo de una plantilla de clase.