http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50982
--- Comment #40 from Jonathan Wakely <redi at gcc dot gnu.org> 2011-11-07 07:34:05 UTC --- I've tracked this behaviour down to cp_parser_parameter_declaration_clause in cp/parser.c which has a special case for else if (token->type == CPP_CLOSE_PAREN) /* There are no parameters. */ { #ifndef NO_IMPLICIT_EXTERN_C if (in_system_header && current_class_type == NULL && current_lang_name == lang_name_c) return NULL_TREE; else #endif return void_list_node; } That macro is defined on platforms that are not known to have C++-compatible system headers