cv-decomposition of a type T is a sequence of cvi and Pi such that T iscv0 P0 cv1 P1  cvn1 Pn1 cvn U” for n0,where each cvi is a set of cv-qualifiers ([basic.type.qualifier]), and each Pi is “pointer to” ([dcl.ptr]), “pointer to member of class Ci of type” ([dcl.mptr]), “array of Ni”, or “array of unknown bound of” ([dcl.array]).
If Pi designates an array, the cv-qualifiers cvi+1 on the element type are also taken as the cv-qualifiers cvi of the array.
The type denoted by the type-id const int ** has two cv-decompositions, taking U as “int” and as “pointer to const int.
 —end example
The n-tuple of cv-qualifiers after the first one in the longest cv-decomposition of T, that is, cv1,cv2,,cvn, is called the cv-qualification signature of T.

  1. This commit changed the cv-decomposition above from n > 0 to n >= 0. As far as I 'm concerned the n > 0 was correct.

  2. The paragraph above says the following:  "The type denoted by the type-id
    const int **  has two cv-decompositions taking U as "int" and as "pointer to const int".

    To the best of my knowledge I would say that the the type-id
    const int ** has the following cv decomposition:

    cv0 = {} P0 = {pointer to}
    cv1 = {} P1 = {pointer to}
    cv2 = {const} U{ int}
What am I missing?