Bizarro uso do operador condicional no Linux

No kernel do Linux 3.0.4, mm / filemap.c tem esta linha de código:

retval = retval ?: desc.error;

Tentei compilar um caso de teste mínimo semelhante com o gcc -Wall e não recebo nenhum aviso; o comportamento parece idêntico a:

retval = retval ? retval : desc.error;

Olhando para o padrão C99, não consigo descobrir o que formalmente descreve esse comportamento. Por que isso está bem?

questionAnswers(4)

yourAnswerToTheQuestion