鉴于以下两个函数,我希望在传递它时调用第一个重载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)));
}
Run Code Online (Sandbox Code Playgroud)
但是,该计划输出:
generic
Run Code Online (Sandbox Code Playgroud)
为什么调用第二个重载,而不是显式占用的重载pair?
这是编译器问题吗?我现在正好使用一个非常古老的编译器(GCC 4.1.2).
嗯......它可能是一个编译器问题: