Aşağıdaki iki işlev göz önüne alındığında, bir std::pair<const char*, std::size_t>
ilettiğimde ilk aşırı yükün çağrılmasını beklerim, çünkü bu, bir genel T
'dan daha belirgindir. Ancak Daha belirgin olan aşırı yüklenme,
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)));
}
bu program çıkışları:
ikinci aşırı yük yerine açıkça
pair
alır aşırı yükleme denir Neden
generic
?
Bu bir derleyici sorun mu var? Şu anda oldukça eski bir derleyici (GCC 4.1.2) kullanıyordum.
İşleri buraya
http://ideone.com/97XwwZ
çağrıldığını: http://ideone.com/vV55Ea da VS2010 üzerinde çalışır. – Chadg ++ (GCC) 4.7.2 – NPE
kullanarak yeniden üretilemez Ne için değer, VS2012 içinde beklediğiniz gibi. –