This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Vararg templates. GCC vs Clang
- From: "Victor" <d dot v dot a at ngs dot ru>
- To: gcc-help at gcc dot gnu dot org
- Date: Wed, 04 Feb 2015 15:41:56 +0600
- Subject: Vararg templates. GCC vs Clang
- Authentication-results: sourceware.org; auth=none
Code:
#include<tuple>
#include<iostream>
template<class Head, class... Tail>
void f(std::tuple<Head, Tail...> )
{
std::cout << "std::tuple<Head, Tail...>\n";
}
template<class Head>
void f(std::tuple<Head> )
{
std::cout << "std::tuple<Head>\n";
}
int main()
{
f(std::tuple<int>{});
}
GCC accepts this code silently. But Clang generates error:
test.cpp:18:5: error: call to 'f' is ambiguous
f(std::tuple<int>{});
^
test.cpp:5:6: note: candidate function [with Head = int,
Tail = <>]
void f(std::tuple<Head, Tail...> )
^
test.cpp:11:6: note: candidate function [with Head = int]
void f(std::tuple<Head> )
^
Which compiler is right? Isn't it abiguity in fact?