我想知道following code:
有什么问题template<typename T, typename U = T>
operator U()
{
return U();
}
它失败了error: no matching function for call to 'Test1::Test1(Test&)'
,而following code上的转换成功了:
template<typename T>
operator T()
{
return T();
}
完整的代码:
class Test
{
public:
template<typename T, typename U = T>
operator U()
{
return U();
}
};
class Test1{};
int main() {
Test t;
Test1 t1 = (Test1)t;
return 0;
}
class Test
{
public:
template<typename T>
operator T()
{
return T();
}
};
class Test1{};
int main() {
Test t;
Test1 t1 = (Test1)t;
return 0;
}
答案 0 :(得分:2)
你使用这个
让编译器变得太难了template<typename T, typename U = T>
operator U()
{
return U();
}
代码说&#34; U与T&#34;的类型相同。并且编译器要求&#34;什么是T?&#34;。 T
在代码中的任何位置都没有使用,因此编译器无法推断出它。
typename U = T
仅适用于一种方式,以便在知道U
时定义T
。