考虑以下 C++ 程序
#include <cwchar>
#include <cwctype>
#include <string>
#include <functional>
template <typename Ty>
struct Tokenize {
Ty m_delim;
Tokenize(Ty& delim):m_delim(delim){}
};
int main() {
std::function<bool (wchar_t)> foo = iswdigit; //Compiles fine
Tokenize<std::string >(std::string("")); //Compiles fine
Tokenize<std::function<bool (wchar_t)> >(foo); // Fails
return 0;
}
在尝试使用 VC++ 编译时,因编译器错误而失败
error C2371: 'foo' : redefinition; different basic types
error C2512: 'Tokenize<Ty>' : no appropriate default constructor available
看起来它试图重新定义 foo,但不知道怎么做
注意仔细检查表明编译器认为
Tokenize<std::function<bool (wchar_t)> >(foo)
作为构造Tokenize<std::function<bool (wchar_t)> >
具有默认参数的类型的对象,即
Tokenize<std::function<bool (wchar_t)> > foo
但问题仍然是为什么?