Por que o resultado desse elenco não é um valor?

Eu preciso de alguns conselhos com esse comportamento estranho - vamos ter este código:

int ** p;

Isso compila sem nenhum problema:

p++;

Mas isso:

((int**)p)++;

Dá-me esta mensagem de erro:“error: lvalue required as increment operand”.

Estou lançando parap para o tipo que já é, nada muda, então qual é o problema? Esta é a versão simplificada do problema que encontrei, quando estava tentando compilar uma versão antiga dogdb. Então, suponho que isso funcionou e algo mudou. Alguma idéia do que está errado com o segundo exemplo?

questionAnswers(4)

yourAnswerToTheQuestion