i can use toupper() without include cctype, why?

Probably because you include another header that includes <cctype>. You can't be sure what headers the standard headers includes and it will differ between compilers and different versions of the the same compiler so to be safe you should include <cctype> anyway.