Uso extraño de operador condicional en Linux
En el kernel de Linux 3.0.4, mm / filemap.c tiene esta línea de código:
retval = retval ?: desc.error;
He intentado compilar un caso de prueba mínimo similar con gcc -Wall y no recibo ninguna advertencia; el comportamiento parece idéntico a:
retval = retval ? retval : desc.error;
Mirando el estándar C99, no puedo entender qué describe formalmente este comportamiento. ¿Por qué está bien esto?