struct _X { ~_X(); }; _X::~X () {} produces t.C:2:8: error: expected class-name before ‘(’ token _X::~X () {} ^ where clang says t.C:2:6: error: expected the class name after '~' to name a destructor _X::~X () {} ^ _X which is clearly better.