For maximum clarity, default arguments always go with the declaration, not the definition. See 8.3.6 Default arguments. Sadly though, your code is actually legal, just a bit confusing to read. This is a bug. -benjamin