鉴于以下两个函数,我希望如果我将第一个重载传递给它,则会调用它std::pair<const char*, std::size_t>
,因为它比泛型更具体T
。
void foo(const std::pair<const char*, std::size_t>& p)
{
std::cout << "pair" << std::endl;
}
template <class T>
void foo(const T& v)
{
std::cout << "generic" << std::endl;
}
int main()
{
const char* s = "abc";
foo(std::make_pair(s, std::size_t(3)));
}
但是,该程序输出:
generic
为什么调用第二个重载,而不是显式采用 a 的重载pair
?
这是编译器问题吗?目前我碰巧正在使用一个相当旧的编译器(GCC 4.1.2)。
嗯...这可能是编译器问题: