Ill-formed or not?

I was playing with Clang and tried declaring variables named like C++ keywords just to see the error I would get, but I noticed that in some cases Clang gives only warnings. Same thing happens with msvc10 (only warnings) but gcc reports an error for each line and now I’m curious to know who’s right?

I understand that something like “int const” might be a valid declaration (the only thing missing is a variable name), but “int virtual” seems just wrong?

keywords.cpp (200 Bytes)