Error del compilador de C++ al mezclar variadic plantillas y función friend

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.

¿Necesita más ayuda?

Ampliar sus conocimientos
Explorar los cursos
Obtener nuevas características primero
Unirse a Microsoft Insider

¿Le ha sido útil esta información?

¡Gracias por sus comentarios!

Gracias por sus comentarios. Quizá le interese ponerse en contacto con uno de nuestros agentes de soporte de Office.

×