Странное использование условного оператора в Linux
В ядре Linux 3.0.4 файл mm / filemap.c содержит следующую строку кода:
retval = retval ?: desc.error;
Я попытался скомпилировать аналогичный минимальный тестовый пример с помощью gcc -Wall и не получил никаких предупреждений; поведение кажется идентичным
retval = retval ? retval : desc.error;
Глядя на стандарт C99, я не могу понять, что формально описывает это поведение. Почему это нормально?