以下规则的原因是什么,“用户定义的转换函数模板不能具有推导的返回类型。”
struct S {
operator auto() const { return 10; } // OK
template<class T> operator auto() const { return 42; } // error
};
最佳答案
即使允许,在第二行中,也没有任何依赖于模板的内容。
它不能被调用(在那种情况下 T
的目的是什么?)
如果你想转换为用户定义的类型,那么你会这样做: 假设您有:
struct S
{
template<typename T> operator T() { return T(42); }
};
这很清楚,不需要推论什么。 你会这样调用它:
S s;
int v = s;
float f = s;
请注意,在那种情况下,在上面的代码中使用 auto
而不是 float
会阻止编译器推断类型(它是 float
? int
? Orange
?)。上面的句子简单地解释了这一点。
关于c++ - 为什么自定义转换函数模板不能有推导的返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57889615/