Notice: This website is an unofficial Microsoft Knowledge Base (hereinafter KB) archive and is intended to provide a reliable access to deleted content from Microsoft KB. All KB articles are owned by Microsoft Corporation. Read full disclaimer for more details.

C++ Compiler error when you mix variadic templates and friend function


View products that this article applies to.

Symptoms

When you try to declare a variadic function template as a friend of a class template, the C++ compiler would return an error message instead of accepting the code. For example, when you do the following declaration:

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

You may receive the following error message:

error C2783: 'void f(C<Types...>,B<U>)': could not deduce template argument for 'U'

↑ Back to the top


Cause

The cause is that the C++ compiler can't match the declaration of the friend function to an existing declaration.

↑ Back to the top


Resolution

This update is available from the Microsoft Download Center.

Microsoft Download Center

For more information about how to download Microsoft support files, click the following article number to view the article in the Microsoft Knowledge Base:

119591 How to obtain Microsoft support files from online services

Microsoft scanned this file for viruses. Microsoft used the most current virus-detection software that was available on the date that the file was posted. The file is stored on security-enhanced servers that help prevent any unauthorized changes to the file.

Prerequisites

This hotfix requires Visual Studio 2015 Update 3.

Restart information

You may have to restart the computer after you apply this hotfix.

Replacement information

This hotfix does not replace any previously released hotfix.

File information

The English version of this hotfix has the file attributes (or later file attributes) that are listed in the following table. The dates and times for these files are listed in Coordinated Universal Time (UTC). When you view the file information, it is converted to local time. To find the difference between UTC and local time, use the Time Zone tab in the Date and Time item in Control Panel.

File name

File version

File size

Date

Time

Platform

VC14-KB4096429.exe

14.0.24240

19,177,304

04/19/2018

02:32 AM

X86

↑ Back to the top


Workaround

To work around this issue, don't declare the variadic function template as a friend of a class template.

↑ Back to the top


Keywords: kbfix, kbsurveynew, kbexpertiseadvanced, C++ Compiler error, error C2783

↑ Back to the top

Article Info
Article ID : 4096420
Revision : 6
Created on : 4/24/2018
Published on : 4/24/2018
Exists online : False
Views : 388