typeid работает некоректно (возможно)

#include <iostream>
#include <typeinfo>
template <typename T1, typename T2, typename T3>
auto min(T1 x, T2 y, T3 z) -> decltype (x < y && x < z ? x : y < z ? y : z)
{
    return (x < y && x < z ? x : y < z ? y : z);
}

int main(void)
{
    int a = 3;
    double b = 777.4;
    char c = 65;
    std::cout << typeid(min(a, b, c)).name(); // Everytime shows double
    return 0;
}

Ответы (1 шт):

Автор решения: user7860670

Ну тогда отвечу, что тип выражений в С++ никогда не зависит от значений, которые в них используются. В лучшем случае, можно использовать значение, известное на этапе компиляции, как часть типа, например ::std::conditional_t< ( 3 < 777.4 ), int, double >

→ Ссылка