Ну в ANSI C (C89, 1989 год) это уже было. Соответственно, должно было быть во втором издании K&R, которое уже базировалось на принятом стандарте.
Ну вот для определенности из стандарта C89
Цитата
3.3.16.1 Simple assignment
Constraints
One of the following shall hold:/42/
...
* the left operand has a qualified or unqualified version of a structure or union type compatible with the type of the right;
Цитата
3.3.15 Conditional operator
Syntax
conditional-expression:
logical-OR-expression
logical-OR-expression ? expression : conditional-expression
Constraints
The first operand shall have scalar type.
One of the following shall hold for the second and third operands:
...
* both operands have compatible structure or union types;
Т.е. можно вообще
Код
struct foo a, b, c;
a = flag ? b : c;
А с возвратом структур из функций -- так даже так (и это C, а не C++, и это 1989 год):
Цитата
3.3.2.3 Structure and union members
...
Example
If f is a function returning a structure or union, and x is a member of that structure or union, f().x is a valid postfix expression but is not an lvalue.