Most expression operators require (complete) object types.
The only three exceptions are the unary & operator,
the first operand of the comma operator,
and the second and third operands of the ``?:'' operator.
Most operators that accept pointer operands
also permit pointers to incomplete types,
unless pointer arithmetic is required.
The list includes the unary ``
''
operator,
even though some may find this surprising.
For example,
given:
voidp
&
p is a valid subexpression that makes use of this.