क्लैंग 3.4 निम्नलिखित कोड स्वीकार करता है; जबकि कुलपति ++ NOV 2013 CTP एक त्रुटि के साथ यह खारिज कर दिया:कोड को क्लैंग द्वारा स्वीकार क्यों किया जाता है लेकिन वीसी ++ द्वारा अस्वीकार किया जाता है?
error C2668: 'AreEqual' : ambiguous call to overloaded function
template<class headT, class... tailTypes>
constexpr headT&& __GetFirst__(headT&& value, tailTypes&&...)
{
return static_cast<headT&&>(value);
};
template<class T>
constexpr bool AreEqual(const T& a, const T& b)
{
return a == b;
}
template<class headT, class... tailTypes>
constexpr bool AreEqual(const headT& head_value, const tailTypes&... tail_values)
{
return AreEqual(head_value, __GetFirst__(tail_values...))
&& AreEqual(tail_values...);
}
int main()
{
AreEqual(1, 1, 2, 1);
}
कौन सा संकलक प्रति सी ++ 14 मानक के रूप में सही है?
अद्यतन: पूर्ण त्रुटि संदेश:
error C2668: 'AreEqual' : ambiguous call to overloaded function
1> d:\projects\ktl\test\main.cpp(20): could be 'bool AreEqual<headT,int>(const headT &,const int &)'
1> with
1> [
1> headT=int
1> ]
1> d:\projects\ktl\test\main.cpp(8): or 'bool AreEqual<headT>(const T &,const T &)'
1> with
1> [
1> headT=int
1> , T=int
1> ]
1> while trying to match the argument list '(const int, const int)'
1>
1>Build FAILED.
साइड नोट : '__GetFirst__' एक आरक्षित नाम है। –
क्या आप पूर्ण त्रुटि संदेश पोस्ट कर सकते हैं? –
पता नहीं है कि कौन सा सही है, लेकिन आसान फिक्स में 3+ पैराम – sp2danny