考慮以下重載函數:爲什麼不重載函數綁定到更具體的超載?
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
「不過,這段代碼實際上調用通用版本。」 [不在鏗鏘聲++ 3.4](http://coliru.stacked-crooked.com/a/f63c920491593bdb)編譯器?版? – dyp
請注意你正在使用的編譯器+版本(和我的Apple LLVM版本4.2(clang-425.0.28),報告「Pair版本」 – WhozCraig
不在g ++ 4.5.2上 –