如果'decltype'是静态的,那么为什么三元运算符以模板的尾随返回类型工作?

bar*_*ney 2 c++ templates c++11 c++14

在Josuttis的书中,我有以下示例:

template<typename T1, typename T2>
auto max (T1 a, T2 b) -> decltype(b<a?a:b)
{
    return b<a?a:b;
}
Run Code Online (Sandbox Code Playgroud)

但是

b<a
Run Code Online (Sandbox Code Playgroud)

部分属于运行时,对不对?那么,为什么要在decltype中对其进行比较(以在模板实例化期间找出静态类型)?以及它如何在编译时正常工作?

MSa*_*ers 6

看来,你认为decltype(b<a?a:b)产生两种类型ab取决于运行时的值。不会,而是产生它们的通用类型。

  • @barney:确实有一个特殊的规则(实际上是一组规则)来确定`?:`表达式的类型。实际上,所有规则都存在这样的规则。 (2认同)