Repetitions also adhere to these restrictions, meaning if a repetition can repeat multiple times(* or +), then the contents must be able to follow themselves. If a repetition can repeat zero times (? or *) then what comes after the repetition must be able to follow what comes before.
I'm pretty sure this has to be a bug, because adjacent exprs are highly ambiguous: consider
impl_d!(a * b * c * d);
where it is ambiguous how many expressions there are and whether each * is a multiplication or a dereference. Searching the issue tracker, I find only this somewhat different case not tagged as a bug: