यह थोड़ी देर के बाद से जीसीसी ने मुझे इस के साथ पकड़ा, लेकिन यह आज हुआ। लेकिन मैंने कभी नहीं समझा है कि क्यों जीसीसी को टेम्पलेट्स के भीतर टाइपपीफ टाइपनाम की आवश्यकता है, जबकि वीएस और मुझे लगता है कि आईसीसी नहीं है। क्या typedef typename चीज "बग" या ओवरस्ट्रिट मानक है, या कुछ ऐसा जो कंपाइलर लेखकों तक छोड़ा गया है?मुझे g ++ में typedef typename का उपयोग करने की आवश्यकता क्यों है लेकिन वीएस नहीं?
जो लोग नहीं जानते कि मैं यहाँ क्या मतलब के लिए एक नमूना है:
template<typename KEY, typename VALUE>
bool find(const std::map<KEY,VALUE>& container, const KEY& key)
{
std::map<KEY,VALUE>::const_iterator iter = container.find(key);
return iter!=container.end();
}
ऊपर कोड (और शायद आईसीसी में) वी.एस. में संकलित है, लेकिन जीसीसी में विफल रहता है क्योंकि यह इस तरह चाहता है:
template<typename KEY, typename VALUE>
bool find(const std::map<KEY,VALUE>& container, const KEY& key)
{
typedef typename std::map<KEY,VALUE>::const_iterator iterator; //typedef typename
iterator iter = container.find(key);
return iter!=container.end();
}
नोट: यह एक वास्तविक कार्य नहीं है जिसका मैं उपयोग कर रहा हूं, लेकिन कुछ मूर्खतापूर्ण समस्या है जो समस्या का प्रदर्शन करती है।
जी ++ में इसकी आवश्यकता है, क्योंकि जी ++ मानक के साथ अधिक अनुपालनशील है। वीएस टेम्पलेटिसेशन पार्सिंग के इस हिस्से पर थोड़ा ढीला था (जिसने अधिक जटिल टेम्पलेट्स में अन्य समस्याओं का नेतृत्व किया है)। –
हां लेकिन मानक फ्रिगिन ऐसा क्यों करता है? मैंने समान कोड से निपटाया है! –