2015-01-04 5 views
5

किस प्रकार std::remove_cv<const int[3]> उत्पादन करना चाहिए? int[3] या const int[3]?किस प्रकार std :: remove_cv को कॉन्स्ट टी की सरणी पर उत्पादन करना चाहिए?

const int[3] एक array of 3 const int सही है ?, और कोई शीर्ष-स्तर सीवी-क्वालीफायर नहीं है। तो क्या यह const int[3] का उत्पादन नहीं करना चाहिए? मुझे लगता है कि जीसीसी/libstdC++ का नवीनतम संस्करण int[3] का उत्पादन कर रहा है। क्या यह एक बग है? क्यों नहीं?

+0

जबकि व्यवहार समझदार है, मुझे आश्चर्य है कि यह कैसे उचित है ... (कोई इसे 3 'int' की 'कॉन्स्ट' सरणी के रूप में पढ़ सकता है।) – Deduplicator

+0

प्रभावी रूप से, यह 'टेम्पलेट संरचना जैसे विशेषज्ञता का उपयोग कर समाप्त हो जाएगा remove_cv {प्रकार = टी का उपयोग कर; }; '। मुझे नहीं लगता कि टी टी कॉन्स्ट [एन] 'उस विशेषज्ञता से मेल खाएगा। –

+0

@ डाइटमारकुहल: मानक कहता है "[परिणाम प्रकार] टी के समान होगा, सिवाय इसके कि किसी भी शीर्ष-स्तर के सीवी-क्वालीफायर को हटा दिया गया है।" –

उत्तर

8

N4140 §3.9.3 [basic.type.qualifier]/पी 5, जोर मेरा:

Cv-क्वालिफायर एक सरणी प्रकार के लिए लागू किया अंतर्निहित तत्व प्रकार से संलग्न है, तो संकेत "cv T, "जहां T एक सरणी प्रकार है, एक सरणी को संदर्भित करता है जिसका तत्व योग्यता प्राप्त करता है। एक सरणी प्रकार जिसका तत्व सीवी-योग्यता है, उसे भी सीवी-योग्यता के तत्वों के रूप में माना जाता है। [उदाहरण:

typedef char CA[5]; 
typedef const char CC; 
CC arr1[5] = { 0 }; 
const CA arr2 = { 0 }; 

arr1 और arr2 दोनों के प्रकार के "5 const char की सरणी," और सरणी प्रकार const -qualified माना जाता है है। - अंत उदाहरण]

भी CWG issue 1059 देखें।

संबंधित मुद्दे