https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88582
--- Comment #2 from Anders Granlund <anders.granlund.0 at gmail dot com> --- Quote from the C17 standard (the bugfix version of C11) 6.7.6.3/5: If, in the declaration “T D1”, D1 has the form D(parameter-type-list) or D(identifier-list[opt]) and the type specified for ident in the declaration “T D” is “derived-declarator-type-list T”, then the type specified for ident is “derived-declarator-type-list function returning the unqualified version of T”. Note that the return type is specified as "the unqualified version of T". Latest draft of the C17 standard (the bugfix for C11): http://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf