std :: remove_cv应该在const T的数组上产生什么类型?

时间:2015-01-04 20:51:54

标签: c++ c++14 typetraits libstdc++

std::remove_cv<const int[3]>应该生成什么类型​​? int[3]const int[3]

const int[3]array of 3 const int权限?,没有顶级cv限定符。那么它不应该产生const int[3]吗?我认为最新版本的gcc / libstdc ++正在生成int[3]。这是一个错误吗?为什么/为什么不呢?

1 个答案:

答案 0 :(得分:8)

N4140§3.9.3[basic.type.qualifier] / p5,强调我的:

  

应用于数组类型的Cv限定符附加到底层   元素类型,因此符号“cv T”,其中T是数组类型,   指的是一个元素是如此合格的数组。 数组类型   其元素是cv-qualified也被认为具有相同的元素   cv-qualifications作为其元素。 [示例

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

arr1arr2的类型是“5 const char的数组”,   数组类型被认为是const - 合格。 - 结束示例]

另见CWG issue 1059