Учитывая следующую функцию:
void g(int **p1, const int**p2)
{
if (p1 == p2) { }
}
clang
(вернуться к версии 3.0) выдает это предупреждение (видеть его в прямом эфире):
warning: comparison of distinct pointer types ('int **' and 'const int **')
uses non-standard composite pointer type 'const int *const *'
[-Wcompare-distinct-pointer-types]
if (p1 == p2) { }
~~ ^ ~~
Использование флагов -pedantic-errors
превращает его в ошибку. Ни gcc
(вернуться к 4.3.6), ни Visual Studio
(2013) не выдают предупреждение, в соответствии со стандартом, это сравнение:
p1 == p2
хорошо сформировано?
В более общем плане, если два многоуровневых указателя отличаются друг от друга по сравнению с первым уровнем, сравнение осуществляется через оператор равенства или корректные отношения реляционных операторов?