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

HTML/CSS - Automatically set height width from background image? -

php - Mysql Show Process - Sleep Commands and what to do -

c - What is the address of buf (the local variable in the main function)? -