Pre-DR: incomplete function return types ======================================== 6.7.5.3#1 says [#1] A function declarator shall not specify a return type that is a function type or an array type. 6.9.1 (entitled "Function definitions") paragraph 3 says [#3] The return type of a function shall be void or an object type other than array type. Does this constraint in 6.9.1#3 apply to all function declarations - on the basis that it says "a function" and not "a function definition" - or only to those that are definitions? That is, do the following declarations (supposing each to be the only declaration in the translation unit) involve constraint violations? (A conformance testsuite considers that the first does, based on C90 DR#113, but that DR only involves function definitions and not declarations which aren't definitions.) volatile void f(void); struct s g(void); I believe that if the first involves a constraint violation then so must the second, although the second describes a function which could be defined once struct s has been completed.