为什么这“按预期”工作?我的理解是这不应该工作:
template <class T, class U>
auto x(T a, U b) -> decltype(a<b ? a:b) {
return a > b ? a : b;
}
int main() {
cout << x<long, double>(1, 2.01) << endl;
cout << x<long, double>(5, 2.01) << endl;
}
我尝试了其他一些组合,例如:
template <class T, class U>
auto x(T a, U b) -> decltype(a<b ? a:a) {
return a > b ? a : b;
}
这样它不会编译错误实际上第二个组合失败了
compile time error: Error C2440 'return': cannot convert from 'U' to 'T &'
这是预期的。我的理解是,第一个函数也应该失败并出现同样的错误,但它工作正常。