Следующая строка кода компилируется просто отлично и ведет себя:
list<const int *> int_pointers; // (1)
В следующих двух строках нет:
typedef int * IntPtr;
list<const IntPtr> int_pointers; // (2)
Я получаю точно такие же ошибки компиляции для
list<int * const> int_pointers; // (3)
Мне хорошо известно, что последняя строка не является законной, так как элементы контейнера STL должны быть назначаемыми. Почему интерпретация компилятора (2) совпадает с (3)?