mardi 29 janvier 2019

Deducing template return type based on operator?: result

Consider this code:

template <typename T1, typename T2>
auto max(T1 t1, T2 t2) -> decltype(true?t1:t2)
{
  return t2 < t1 ? t1 : t2;
}

When calling this function with ::max(5, 7.2) I'm expecting the returned type to be int as decltype(t1) is in this case int.

Why is the deduced return type double in the above code when using operator?: inside the decltype?

If I do -> decltype(t1) I get the expected return type int.

Aucun commentaire:

Enregistrer un commentaire