c++ - Specializing a template method of a non-template class - works in MSVC, compilation error in GCC -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 5 जवाब

मेरे पास कुछ कोड है जो फोड़े इसे करने के लिए नीचे:

  #include & lt; type_traits & gt; Struct CByteArray {}; संरचना CIODevice {टेम्पलेट & lt; typename T & gt; CIODevice & amp; ऑपरेटर के लिए & lt; & lt; (टी मान) {static_assert (std :: is_pod & lt; T & gt; :: मूल्य, "यह विधि केवल पीओडी प्रकारों के लिए है"); वापसी * ​​यह; } टेम्पलेट & lt; & gt; CIODevice & amp; ऑपरेटर के लिए & lt; & lt; (सीबीयएरारे डेटा) {वापसी * ​​यह; } टेम्पलेट & lt; typename T & gt; CIODevice & amp; ऑपरेटर & gt; & gt; (टी एंड amp; मान) {static_assert (std :: is_pod & lt; T & gt; :: मूल्य, "यह विधि केवल पीओडी प्रकारों के लिए है"); वापसी * ​​यह; }}; Int main () {CIODevice डिवाइस; Int i = 0; डिवाइस & lt; & lt; मैं; डिवाइस & gt; & gt; मैं; वापसी 0; }  

यह एमएसवीसी में संकलित है, लेकिन जीसीसी में मुझे यह मिलता है:

  prog.cpp: 13: 12: त्रुटि: गैर-नेमस्पेस स्कोप 'स्ट्रक्चर सीआईओडीइविस' टेम्पलेट में स्पष्ट विशेषज्ञता & lt; & gt; ^ Prog.cpp: 20: 11: त्रुटि: बहुत सारे टेम्प्लेट-पैरामीटर-सूचियां सीआईओडीविस और amp; ऑपरेटर & gt; & gt; (टी एंड amp; मूल्य) ^ prog.cpp: फ़ंक्शन 'int main ()': prog.cpp: 32: 9: त्रुटि: 'ऑपरेटर & gt; & gt;' के लिए कोई भी मैच नहीं है (प्रचालन प्रकार 'CIODevice' और 'int' हैं) डिवाइस & gt; & gt; मैं; ^  

मैं इसे नहीं मिला, यहां गलती क्या है?

सी ++ विनिर्देश § 14.7.3 (अंश);

  1. निम्न में से किसी एक के स्पष्ट स्पष्टीकरण: ...
    < Ul>
  2. एक वर्ग या वर्ग के टेम्पलेट के सदस्य फ़ंक्शन टेम्पलेट ...
  3. विशिष्ट टेम्प्लेट को बंद करने वाले नामस्थान में एक स्पष्ट विशेषज्ञता घोषित की जाएगी।

असल में, इसे नामस्थान क्षेत्र में घोषित किया जाना चाहिए (जैसा कि जीसीसी और रकम की आवश्यकता होती है)।

  struct CIODevice {टेम्पलेट & lt; typename T & gt; CIODevice & amp; ऑपरेटर के लिए & lt; & lt; (टी मान) {static_assert (std :: is_pod & lt; T & gt; :: मूल्य, "यह विधि केवल पीओडी प्रकारों के लिए है"); वापसी * ​​यह; } टेम्पलेट & lt; typename T & gt; CIODevice & amp; ऑपरेटर & gt; & gt; (टी एंड amp; मान) {static_assert (std :: is_pod & lt; T & gt; :: मूल्य, "यह विधि केवल पीओडी प्रकारों के लिए है"); वापसी * ​​यह; }}; टेम्पलेट & lt; & gt; CIODevice & amp; CIODevice :: ऑपरेटर के & lt; & lt; (सीबीयएरारे डेटा) {वापसी * ​​यह; }  


Comments

Popular posts from this blog

apache - 504 Gateway Time-out The server didn't respond in time. How to fix it? -

c# - .net WebSocket: CloseOutputAsync vs CloseAsync -

c++ - How to properly scale qgroupbox title with stylesheet for high resolution display? -