Пример в [conv.qual] / 1 говорит, что тип const int **
имеет два cv-разложения.
Cv-разложение типа T - это последовательность cv_i и P_i, такая что T равна
«cv_0 P_0 cv_1 P_1 ⋯ cv_ {n − 1} P_ {n − 1} cv_n U»
для n≥0, где каждый cv_i является набором cv-квалификаторов ([basic.type.qualifier]), и
каждый P_i является «указателем на» ([dcl.ptr]), «указателем на член класса Ci
тип »([dcl.mptr]),« массив N_i »или« массив неизвестных границ »
([Dcl.array]). Если P_i обозначает массив, cv-квалификаторы cv_ {i + 1} для типа элемента также принимаются как cv-квалификаторы cv_i массива.
[Пример: Тип, обозначенный идентификатором типа const int **
, имеет два cv-разбиения, принимающих U как «int
» и как «указатель на const int
» .
- конец примера]
N-кортеж cv-квалификаторов после первого в самом длинном cv-разложении T, то есть cv_1, cv_2,…, cv_n, называется cv-квалификационной сигнатурой T.
Почему тип не имеет трех декомпозиций: третья с n = 0, cv_0 пуста и U = "указатель на указатель на const int
"?