मेरे पास एक अतिभारित टेम्पलेट फ़ंक्शन है:
template<typename T1, typename T2>
auto overMax(T1 a, T2 b)
{
std::cout << __FUNCSIG__ << std::endl;
return b < a ? a : b;
}
template<typename RT, typename T1, typename T2>
RT overMax(T1 a, T2 b)
{
std::cout << __FUNCSIG__ << std::endl;
return b < a ? a : b;
}
अगर मैं इसे इस तरह कहता हूं:
auto a = overMax(4, 7.2); // uses first template
auto b = overMax<double>(4, 7.2); // uses second template
सब कुछ सही काम करता है, लेकिन
auto c = overMax<int>(4, 7.2); // error
अस्पष्ट कॉल का कारण बनता है।
ऐसा इंट , और ओके के साथ ऐसा क्यों है ?
int
क्या आपtypename RT
या को निर्दिष्ट कर रहे हैंtypename T1
? चूंकि4
यह भी एक हैint
, यह या तो हो सकता है। के साथdouble
, सीधे प्रकार से मेल4
नहीं खाता है , इसलिए दूसरा अधिभार पसंद किया जाता है।double