2015-01-04 18 views
5

std::remove_cv<const int[3]> hangi tür üretmek gerekir? int[3] veya const int[3]?std :: remove_cv, const dizisinin bir dizisini oluşturur?

const int[3] doğru bir array of 3 const int olduğunu ?, ve hiçbir üst düzey cv-eleme sahiptir. Yani const int[3] üretmemeli? Gcc/libstdC++ 'nin son sürümü int[3]'u üretiyor. Bu bir hata mı? Neden/neden olmasın?

+0

davranış mantıklı olsa da, bunu haklı nasıl acaba ... (Bir 3 'int' bir' const' dizi olarak okuyabilirim.) – Deduplicator

+0

Değerine bağlı olarak 'şablon yapı gibi bir uzmanlık kullanarak sona ereceği remove_cv {using type = T; }; '. Ben T const [N] 'nin bu uzmanlık ile eşleşmeyeceğini sanmıyorum. DietmarKühl @ –

+0

: Standart "[sonuç tipi] herhangi bir üst düzey ev-niteleyici kaldırıldı dışında T ile aynı olacaktır." Der –

cevap

8

N4140 §3.9.3 [basic.type.qualifier]/p5, vurgu benim:

Cv-eleme yatan eleman türü eklemek dizi tipine uygulanabilir, böylece gösterim “cv T, T bir dizi türü burada”, bunun elemanları çok kalifiye olan bir dizi anlamına gelir. bir dizi, elemanları aynı zamanda elemanları ile aynı ev-niteliklere sahip olduğu düşünülür cv-nitelikli tip . [Örnek:

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

arr1 ve arr2 hem de tip “5 const char dizisi” ve dizi türü ulaşım kolaylığı const olduğu kabul edilir. - uç örneği]

da CWG issue 1059 bakınız.

İlgili konular