А данный пример вкупе с тоже не всеми сразу понимаемыми
while( *dst++ = *src++) ;
(flag ? func1 : func2)(arg1, arg2);
тривиален, топчется вокруг базового для С понятий выражений и побочных эффектов.
На мой взгляд - понгимание/непонимание этой "пи-вычислялки" лежит не на оси "тривиально-нетривиально", а на оси "понял - не понял основы языка". Собственно,
expr1 && expr2;
мало чем отличается от
while( expr1 && expr2) { }
с точки зрения вычисления выражнеия (expr1 && expr2) и его подвыражений.
Пожалуй, соглашусь, что нетривиальным (в самом языке С, а не в "пи-вычислялке" или других "типа трюках", которые не более трюки, чем приведенное выше копирование строки с упакованными внутрь условия while всеми операциями) есть то, что
a = b;
это не "операция присваивания", а выражение, в котором есть оператор присваивания - "assignment expression". Само присваивание есть побочным эффектом вычисления этого выражения
6.5.16 Assignment operator
...
Semantics
An assignment operator stores a value in the object designated by the left operand. An assignment expression has the value of the left operand after the assignment, but is not an lvalue. The type of an assignment expression is the type of the left operand unless the
left operand has qualified type, in which case it is the unqualified version of the type of the left operand.
The side effect of updating the stored value of the left operand shall occur between the previous and the next sequence point.
Вот если понять это в С, то все "трюки (x) || F()" перестают быть *трюками* и становятся естественным результатом вычисления выражений.