see code below:
#include <algorithm>
#include <ctype.h>
#include <cctype>
#include <string>
int main() {
    std::string str = "a String";
    
    // compile fail: template deduction fail for _Pred
    // return std::any_of(str.begin(), str.end(), std::isupper);
    // OK:
    return std::any_of(str.begin(), str.end(), isupper); // or ::isupper
}
both std::isupper and isupper have same declaration according to cppreference.com:
Defined in header < cctype>
int isupper( int ch );
Defined in header <ctype.h>
int isupper( int ch );
So, why?
 
    