参见以下代码:
#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
}
根据cppreference.com,std::isupper
和isupper
具有相同的声明:
在标题中定义< cctype>
内部接口(内部通道);
在标题中定义<ctype.h>
内部接口(内部通道);
那么,为什么呢?
1条答案
按热度按时间hc2pp10m1#
命名空间
std
中有多个isupper
函数。一个是中定义的int std::isupper(int)
,另一个是中定义的template <typename charT> bool isupper( charT ch, const locale& loc )
。似乎你的也包含了,使编译器无法推断出使用了哪个
isupper
。你可以尝试以下方法:但是,正如其他人提到的,最好使用lambda来 Package 对
std::isupper
的调用: