मैं वर्तमान में कुछ कोड देख रहा हूं जिसे जीसीसी के नए संस्करणों पर संकलित किया जा सकता है लेकिन पुराने लोगों पर नहीं। मेरे मामले में मैं std::back_inserter
से std::copy
का उपयोग कर रहा हूं, एक डेटा संरचना से कुछ डेटा एक कस्टम डेटा संरचना में। अगर मैं इस कस्टम डेटा संरचना में typedef value_type & const_reference
टाइपपीफ भूल जाता हूं, तो यह जीसीसी 4.4 पर संकलित नहीं होगा। एक ही कोड संकलित करता है और जीसीसी 4.5 पर ठीक है।std :: back_inserter को पुराने जीसीसी पर const_reference की आवश्यकता है। क्यूं कर?
इन दो कंपाइलर संस्करणों के बीच क्या अंतर है, जो कोड को एक संस्करण पर संकलित करता है लेकिन दूसरे पर नहीं। मुझे लगता है कि इसका सी ++ 11 के कार्यान्वयन के साथ कुछ करना है जो जीसीसी 4.4 में बहुत कम था। शायद decltype
या कोई अन्य नया C++ 11 कीवर्ड वाला कुछ, मुझे लगता है।
यह कोड भी सही है, यदि मैं का उपयोग const_reference
प्रकार को परिभाषित किए बिना करता हूं? मैंने आमतौर पर सोचा था कि एसटीएल-एल्गोरिदम पुस्तकालय के साथ संगत होने के लिए किसी को टाइपपीफ (value_type
, reference
, const_reference
आदि) का पूरा सेट लागू करना होगा? या क्या मैं सुरक्षित रूप से यह मान सकता हूं कि यदि मेरा कोड इस मामले में संकलित करता है तो मैं कुछ भी खतरनाक नहीं कर रहा हूं (उदाहरण के लिए अर्थशास्त्र चलाएं, जो मेरे अन्य डेटास्ट्रक्चर को नष्ट कर देगा)।
रिकॉर्ड के लिए (शुरुआती समय की तरह शुरुआती लोगों की मदद करने के लिए): मैंने 'टाइपपीफ टी और संदर्भ जोड़ा; टाइपपीफ कॉन्स टी & const_reference; ' मेरी डेटा संरचना में, back_inserter के लिए त्रुटि c2039 चला गया है।स्पष्टीकरण के लिए –