Я думаю, что я либо неправильно понял что-то, либо что-то в стандарте может быть неоднозначным.И это касается квалификационных преобразований.
Согласно новейшему проекту http://eel.is/c++draft/conv.qual#1
Cv-разложение типа T - это последовательность cvi и Pi такая, чтоT - это «cv0 P0 cv1 P1 ⋯ cvn − 1 Pn − 1 cvn U» для n> 0,
, насколько я понимаю, разложение типа T:
using T1 = const char * const **;
может быть следующим
- n = 2
- U = char
- cv2 = const
- P2 = *
- cv1= const
- P1 - *
- cv0 = пусто
- P0 = *
, но поскольку не указано, в каком направлении должна идти декомпозиция(IMO) можно также интерпретировать по-другому:
- n = 2
- U = char
- cv0 = const
- P0 = *
- cv1 = const
- P1 - *
- cv2 = пусто
- P2 = *
Это будет иметь значениедля следующего предложения http://eel.is/c++draft/conv.qual#3.3:
Если cv1i и cv2i различны, тоconst в каждом cv2k для 0
Поскольку для первой интерпретации предложение никогда не будет выполнено для i = 1 или 2, тогда как для второй интерпретации предложение будет истиннымдля i = 1 или 2.
Мое второе сомнение в том, как интерпретировать предложение
Если cv1i и cv2i различны, то const присутствует в каждом cv2k для 0
Для i = 0 или 1. Для i = 0 или 1 набор cv пуст, поэтому мы можем сказать, что все cv для этого набора имеют const, потому что все равно none и тамне является элементом в наборе, но мы также можем сказать, что ни один элемент не имеет const, поскольку в наборе нет ни одного элемента.
Есть ли в стандарте место, которое объясняет, как точно пониматьcv разложение и в каком направлении это должно идти?