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?