【发布时间】:2015-11-08 14:27:47
【问题描述】:
#include <tuple>
template<int I>
struct A {};
template<int I, typename... T>
void f(A<I>, std::tuple<T *...>) {}
template<typename... T>
void f(A<0>, std::tuple<T *...>) {}
int main()
{
f(A<0>{}, std::tuple<char*, int*, float*>{});
}
f 的第二个重载不是更专业吗? g++ 4.9.2 表示调用不明确,clang 3.6.0 接受它。哪个编译器是对的?
有意思的是,如果你把std::tuple<T *...>改成std::tuple<T...>,g++就可以了,我没看懂。
【问题讨论】:
标签: c++ function c++11 compiler-errors overloading