次のコードの何が問題なのか疑問に思っていました:
template<typename T, typename U = T>
operator U()
{
return U();
}
で失敗しますが、次のコードerror: no matching function for call to 'Test1::Test1(Test&)'
の変換は成功します。
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;
}