3.3.1: The point of declaration for a name is immediately after its complete declarator (clause 8) and before its initializer (if any) 3.3.2: The potential scope of a function parameter name ... begins at its point of declaration. So this ought to be well-formed: void f (int t, char (*buf_p)[sizeof(t)]) {} but G++ doesn't declare 't' until after the closing paren, so name lookup fails. This wasn't a very interesting bug until the advent of late-specified return types, which relies on naming parameters to be at all useful.
Fixed.