考虑以下重载函数:
template <class T>
void foo(const T& v)
{
std::cout << "Generic version" << std::endl;
}
void foo(std::pair<const void*, std::size_t> p)
{
std::cout << "Pair version" << std::endl;
}
下面,我希望调用第二个重载(需要std::pair
的重载):
int main()
{
const void* buf = 0;
std::size_t sz = 0;
foo(std::make_pair(buf, sz));
}
但是,这段代码实际上称为通用版本。为什么它不绑定特定需要std::pair
的重载?这是编译器错误吗?我正在使用一个非常古老的编译器,GCC 4.1.2
答案 0 :(得分:3)
尝试
template <>
void foo(const std::pair<const void*, std::size_t>& p)
{
...
}