initlializer_list मैं निम्नलिखित समारोह टेम्पलेट है:समारोह टेम्पलेट कटौती और
template <typename K, typename V>
void f(std::initializer_list<std::pair<const K, V>> il)
{
//...
}
मैं समारोह के रूप में इस फोन:
f({std::pair<const int,int>(1,2), std::pair<const int,int>(3,4)}); //(a)
और यह ठीक काम करता है।
हालांकि, अगर मैं कोशिश करते हैं और इसे कहते इस प्रकार है:
f({{1,2}, {3,4}}); //(b)
यह सही प्रकार अनुमान करने में सक्षम नहीं है, और मैं की तर्ज पर एक संकलन त्रुटि मिलती है:
'no matching function for call to 'f(<brace-enclose initializer list>)
note candidate is:
note: template <class K, class V> void f(std::initializer_list<std::pair<const K, V>>)'
यदि मैं इसे निम्नानुसार कॉल करता हूं:
f({std::pair<const int,int>(1,2), {3,4}}); //(c)
प्रकार कटौती कार्य करता है, लेकिन यदि मैं इसे निम्न प्रकार से कोशिश करता हूं और कॉल करता हूं:
f({std::make_pair(1,2), {3,4}}); //(d)
मुझे पहले जैसा ही संकलन त्रुटि मिलती है।
मेरा प्रश्न है:
क्यों में (ग) टेम्पलेट प्रकार कटौती काम लेकिन में (घ) नहीं?
(संकलक, जीसीसी v4.6.3 है झंडा -std = C++ 11) के साथ
मैं समान पर ध्यान दिया है, पुराने अतः पदों पर वे काफी इस सवाल का जवाब करने के लिए प्रकट नहीं किया था।
हाँ के पहले भाग के लिए
const int
उत्पन्न नहीं करेगा हां, मुझे बी के साथ लगाया जाएगा) जो अनुमान नहीं लगा सकता है, हालांकि, make_pair से गैर const int int के बारे में भूल गया। धन्यवाद। – TPJ'{1,2}' 'प्रारंभकर्ता_सूची' "के लिए नहीं लिया गया है, यह एक गैर-कटौती संदर्भ है जब तक कि इसे 'प्रारंभकर्ता_सूची ' के साथ जोड़ा जाता है। एक अंतर है (यदि संकलक वास्तव में सभी मामलों में '{1, 2}' से 'प्रारंभकर्ता_सूची ' घटाता है, तो (सी) संकलित नहीं होगा)। –
मैंने वाक्य को दोहराया, धन्यवाद! –