A conversion can add cv-qualifiers at levels other than the first in multi-level pointers, subject to the following rules:51)
Two pointer types T1 and T2 are similar if there exists a type T and integer n > 0 such that:
T1 is cv1 , 0 pointer to cv1 , 1 pointer to . . . cv1 ,n − 1 pointer to cv1 ,n T
and
T2 is cv2 , 0 pointer to cv2 , 1 pointer to . . . cv2 ,n − 1 pointer to cv2 ,n T
where each cvi, j is const, volatile, const volatile, or nothing. The n-tuple of cv-qualifiers after the first in a pointer type, e.g., cv1 , 1 , cv1 , 2 , . . . , cv1 ,n in the pointer type T1, is called the cvqualification signature of the pointer type. An expression of type T1 can be converted to type T2 if and only if the following conditions are satisfied:
— the pointer types are similar.
— for every j > 0, if const is in cv1 , j then const is in cv2 , j, and similarly for volatile.
— if the cv1 , j and cv2 , j are different, then const is in every cv2 ,k for 0 < k < j.