A fowrard declaration declares the identifier (puts it in a namespace) before the actual definition. You need forward declaration of structs if you need to use a pointer to the struct before the struct is defined.
In the context of the answer you linked, if you have typedef struct {...} Foo;
, you cannot use a pointer to Foo inside the struct or before the end of the typedef statement.
On the other hand you can typedef struct tagFoo Foo;
and later struct tagFoo {...};