C++ 如何在编译时确定此返回类型?

C++ 如何在编译时确定此返回类型?,c++,templates,C++,Templates,可能重复: 从另一个问题中,我得到了这个函数模板: template <class T, class U> auto min(T x, U y) -> decltype(x < y ? x : y) { return x < y ? x : y; } 模板 自动最小值(tx,uy)->decltype(x

可能重复:

从另一个问题中,我得到了这个函数模板:

template <class T, class U>
auto min(T x, U y) -> decltype(x < y ? x : y) {
    return x < y ? x : y;
}
模板
自动最小值(tx,uy)->decltype(x

它编译起来似乎很好,但我不确定它为什么能工作。如何在编译时推导返回类型我认为它可以是
T
U
,这取决于哪个参数较小,并且只能在运行时确定?b:c
始终返回相同的类型,无论
a
是否为真值。如果
b
c
属于不同的类型,那么类型提升就会发生,就像
3+4.2
评估为
7.2
(通过
double(3)+4.2
)一样。

你的“问题”可能是对@FailedDev的评论:@FailedDev为什么它本身就不是一个好问题?我的问题是关于它是如何工作的,这似乎是关于函数实现中的细微错误。完全不同…表达式
x
不依赖于
x
y
的值,只依赖于它们的类型。这方面的规则在第5.16节(条件运算符)中有详细说明,但简短的版本是编译器寻找一种通用类型,
x
y
都可以转换为它。@Paul,对我的(5)个问题进行向下表决不会让你有任何结果。此外,系统会自动检测此类有偏差的向下投票,并对其进行纠正。我不知道你想达到什么目的。