The C++ standard says this about the void parameter list: "The parameter list (void) is equivalent to the empty parameter list." (8.3.5 [dcl.fct] paragraph 2) The C99 standard apparently says something slightly different, though I'm afraid I'm quoting from a draft here: "The special case of an unnamed parameter of type void as the only item in the list specifies that the function has no parameters." (6.7.5.3 paragraph 10) If I understand these correctly, this means a C compiler must take type aliases into account before checking for the special case whereas a C++ compiler must not. The development version of g++ follows the C++ standard in this respect, whereas older versions of g++ follow the C standard. During testing of the new version in Debian, we found that this change broke a C++ program that uses the OpenAL library, one of whose headers used a type alias for void in a function parameter list; see http://bugs.debian.org/361707 Given that this special case only exists in C++ for compatibility with C, it seems to be a defect in the standard that it is defined slightly differently, and accordingly I have submitted a defect report. I think g++ should not be changed to follow the C++ standard in this respect until this has been resolved by the C++ standard committee.
This was an undocumented extension. Hint the word is really a bug and not an extension. Maybe something should go to changes.html but that is not really an issue. *** This bug has been marked as a duplicate of 9278 ***
http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/cwg_closed.html#18 was the Defect report for the C++ standard already.
One more thing is that filing a bug report is not the correct approach to filing a defect report with the standard since there was already a defect which was closed as NAD (not a defect).