मेरे पास कोड है जो निम्न में उकसता है:
टेम्पलेट & lt; typename T & gt; Struct Foo {}; टेम्पलेट & lt; typename टी, कॉन्स्ट फू & lt; T & gt; & amp; मैं & gt; संरचना फूबर {}; //////// टेम्पलेट & lt; typename T & gt; संरचना बाज़ {}; टेम्पलेट & lt; typename टी, कॉन्स्ट फू & lt; T & gt; & amp; मैं & gt; Struct बाज़ & lt; FooBar & LT; टी, मैं & gt; & Gt; {स्थिर शून्य मजेदार (फ़ूबार & lt; टी, आई & gt; और मान); }; //////// स्ट्रेट {स्टैटिक कॉन्स्ट फू एंड लेफ्ट; फ्लोट & gt; s_floatFoo; }; // अन्य जगह: कॉन्स्ट फू & lt; float & gt; MyStruct :: s_floatFoo; शून्य कॉलबैज़ () {टाइप किए गएफ़ फूबर & लेफ्टिनेंट; फ़्लोट, माइस्ट्राल्ट :: एस_ फ्लोएटफ़ू & gt; FloatFooBar; फ्लोटफ़ूबर मेराफ़्लॉटफूबार; बाज & LT; FloatFooBar & gt; :: समारोह (myFloatFooBar); }
यह जीसीसी के तहत सफलतापूर्वक संकलित करता है, हालांकि, वीएस 2005 के तहत, मुझे मिलता है:
त्रुटि C2039: 'func': 'बाज़ एंड लेफ्टिनेंट का सदस्य नहीं है टी & gt; ' [T = FloatFooBar] त्रुटि C3861: 'func': पहचानकर्ता नहीं मिला
हालांकि, अगर मैं const Foo & lt; T & gt; & amp; I
से const Foo & lt; T & gt; * I
(संदर्भ के बजाय सूचक द्वारा I
), और FloatFooBar
को परिभाषित करता है:
टाइप किए गएफ़ फूबर & lt; फ्लोट, और माइस्ट्राल्ट :: s_floatFoo & gt; FloatFooBar;
दोनों जीसीसी और वीएस 2005 खुश हैं।
क्या चल रहा है? क्या यह कुछ प्रकार की सूक्ष्म टेम्पलेट प्रतिस्थापन विफलता है जो कि वीएस 2005 जीसीसी, या एक कंपाइलर बग से अलग तरीके से निपट रहा है?
(सबसे अजीब बात: मैं सोचा मुझे ऊपर कोड काम कर रहा था वीएस 2005 पहले आज सुबह, लेकिन यह मेरी सुबह की कॉफी से पहले थी। मैं अब पूरी तरह से निश्चित नहीं हूं कि मैं किसी प्रकार के कैफीन-तरस-प्रेरित भ्रम के तहत नहीं था ...)
< मेरे लिए ऐसा लगता है कि VS2005 Baz
टेम्पलेट & lt; के पहले टेम्प्लेट विनिर्देशन का उपयोग करता है। टिनामनाम टी एंड जीटी; संरचना बाज़ {};
इस संरचना में वास्तव में func
नाम वाला सदस्य नहीं है ऐसा लगता है कि वीएस 2005 सही ढंग से टेम्प्लेट पैरामीटर को नहीं निकालता है।
Comments
Post a Comment