No: The character type has to be known (assume a 32 bit int is a character type having a 64 bit representation for EOF). It can not be resolved, a locale is not bounded to a specific character type, but it's facets are.
Having:
std::isxdigit<char>(std::cin.peek(), std::cin.getloc());
will clarify the call and (!) ignore EOF making it char(int(-1)).
Hence you might check for EOF yourself.