"variable". A variable is a parameter denoted by a name but there are
also parameters denoted by a special character or a positive integer.
Although the man page does not describe this correctly, set -u applies
to all parameters except $@ and $*. This means it detects an attempt to
use an unset positional parameter or to use $! if no background job has
been started yet. In that case, the error message should not contain
"variable".
Dash implements the part about $@ and $* by always considering them as
being set. Per http://austingroupbugs.net/view.php?id=155 , this is
correct for set -u but incorrect in cases like ${*+set} which should
only expand to something if there are positional parameters.
The other special parameters $#, $?, $-, $$ and $0 are always set.