没有调用更具体的过载

Cha*_*l72 14 c++

鉴于以下两个函数,我希望在传递它时调用第一个重载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).

嗯......它可能是一个编译器问题:

http://ideone.com/97XwwZ

Pup*_*ppy 9

您的编译器肯定是错误的.它是什么错误,只会是猜测,但你是正确的,这个代码应该提供更具体的输出.样本不够大或太复杂,不足以使任何更微妙的规则成为原因.