Tuesday, 15 September 2015

c++ - Identity of template aliases -


टेम्पलेट उपनामों के सेट पर विचार करें:

  टेम्पलेट & lt; class T & gt; Foo = T * का उपयोग कर; टेम्पलेट & lt; कक्षा T & gt; बार = टी * का उपयोग कर; टेम्पलेट & lt; कक्षा T & gt; Buz = foo का उपयोग करके & lt; T & gt; टेम्पलेट के & lt; टेम्पलेट & lt; वर्ग & gt; कक्षा टीटी & gt; संरचना आईडी {}; Id_foo = id & lt; foo & gt;; Id_bar = आईडी & lt; बार & gt;; Id_buz = id & lt; buz & gt ;;  

क्या id_foo , id_bar , id_buz समान या विभिन्न प्रकार हैं? क्या foo , बार , buz समान या अलग टेम्पलेट हैं?

विभिन्न कंपलर्स के उस पर अलग राय है।

  • जीसीसी 4.9 व्यवहार buz जैसा कि foo
      • >

        अध्याय 14.5.7 "उपनाम टेम्पलेट्स" में मानक सी +11 अस्पष्ट है।

        जैसा कि सवाल में बताया गया है, यह एक मानक है।

        14.5.7 [temp.alias] के मौजूदा शब्द प्रतिस्थापन के बाद टाइप-आईडी के साथ एक उपनाम टेम्पलेट के विशेषकरण की तुल्यता

        यही है: foo , बार का कोई विशेषकरण और buz एक ही प्रकार का प्रतिनिधित्व करेगा। लेकिन इसमें कोई गारंटी नहीं है कि, जब एक टेम्पलेट पैरामीटर के रूप में उपयोग किया जाता है, foo , बार और buz विनिमेय हैं।


  • No comments:

    Post a Comment