[Bug c++/96976] New: g++ reports "call of overloaded '...' is ambiguous" when universal reference is used
igor.chorazewicz at intel dot com
gcc-bugzilla@gcc.gnu.org
Tue Sep 8 11:44:20 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96976
Bug ID: 96976
Summary: g++ reports "call of overloaded '...' is ambiguous"
when universal reference is used
Product: gcc
Version: 9.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: igor.chorazewicz at intel dot com
Target Milestone: ---
Following code compiles fine on clang++ and gcc 11 but fails on all older gcc
versions I tested (9.3.0, 9.2.1, 10.0.1).
#include <type_traits>
template <typename... Args>
void f(int &&a, Args&&... args)
{
}
template <typename K, typename... Args, typename = typename
std::enable_if<true, K>::type>
void f(K&& k, Args&&... args)
{
}
int main() {
f(1, 2);
return 0;
}
The error is:
prog.cc: In function 'int main()':
prog.cc:14:11: error: call of overloaded 'f(int, int)' is ambiguous
14 | f(1, 2);
| ^
prog.cc:4:6: note: candidate: 'void f(int&&, Args&& ...) [with Args = {int}]'
4 | void f(int &&a, Args&&... args)
| ^
prog.cc:9:6: note: candidate: 'void f(K&&, Args&& ...) [with K = int; Args =
{int}; <template-parameter-1-3> = int]'
9 | void f(K&& k, Args&&... args)
Note that if I remove the dummy enable_if, the program compiles fine. It also
compiles if there is no template parameter pack (Args...)
More information about the Gcc-bugs
mailing list