https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77449
Bug ID: 77449
Summary: False ambiguity for variadic function with non-deduced
template parameter
Product: gcc
Version: 6.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: rbock at eudoxos dot de
Target Milestone: ---
g++ considers the following code ambiguous:
template <typename X, typename Check, typename... T>
auto bar(Check, T...) -> void;
template <typename X, typename... T>
auto bar(int, T...) -> void;
int main()
{
bar<void>(7, ""); // ambiguous according to gcc
bar<void>(7); // just fine
}
clang, msvc and icc agree that `auto bar(int, T...) -> void;` is more specific.
They therefore consider the code non-ambiguous.
Hint: The ambiguity is not seen by g++ if
- parameter T is non-variadic or
- parameter X is removed