Quick Q: Why does unary operator & not require a complete type?
Quick A: It only need to take the address.
Recently on SO:
Why does unary operator & not require a complete type?
What if stru has overloaded operator&()?
Then it is unspecified whether the overload will be called (See Oliv's comment for standard quote).
How could unary operator & does not require a complete type?
That's how the standard has defined the language. The built-in address-of operator doesn't need to know the definition of the type, since that has no effect on where to get the address of the object.
One consideration for why it is a good thing: Compatibility with C.