http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50477
--- Comment #4 from miles at gnu dot org 2011-09-23 08:59:47 UTC --- It's different because unlike most function/method definitions, this is _two_ things together -- a virtual method declaration, which pertains to this class and all subclasses, and a method definition, which only instead only really pertains to this class. Note that if you separate the definition and the declaration, there's no issue -- the definition can have the parameter name omitted, or use the "unused" attribute, and it makes perfect sense, both to the compiler, and to readers. But if one uses the inline definition, there's no way to separate these two uses; the compiler still understands of course; it's readers who are inconvenienced, because they see code obfuscation intended for the _definition_ when they read the code to see the _declaration_. If it were a simple function (or an out-of-line method definition, or a non-virtual method), I'd happily use attribute "unused" (or whatever), because it clearly does apply to the definition, and indeed makes the code more readable by documenting something. It's only in this case where two different things are mixed together that I'm uncomfortable doing so. I'm not denying that there are many ways to make the compiler happy; my complaint is that they all make the code less readable, and I think readability is important.