爲什麼大多數C++編譯器能夠推斷出::isspace
的類型並將其隱式轉換爲std::function
,但是他們無法爲std::isspace
這麼做?在C++中,爲什麼<cctype>定義了std :: isspace和:: isspace?
請參閱the following不編譯:
#include <cctype>
#include <functional>
template <typename Functish>
bool bar1(Functish f) { return f('a'); }
inline bool bar2(std::function<bool(char)> f) { return f('a'); }
#if 1
#define ff &std::isspace
#else
#define ff &::isspace
#endif
#if 0
bool foo()
{
return bar1(ff);
}
#else
bool foo()
{
return bar2(ff);
}
#endif
由編譯器Explorer支持的編譯器,ELLCC似乎是唯一一所在std::isspace
有deducibility /兌換,我期望的那樣。
這就是爲什麼它更好地使用普通的'.h'頭文件,因爲它們是可以預測的 – stackptr
我認爲它與'使用'有關' – o11c