プロモーションがいつ行われるか、それが何であるかを知る必要があります。私の推測では
template <typename T>
struct promoted { using type = std::common_type_t<T, T>; };
template <typename T>
using promoted_t = typename promoted<T>::type;
明らかに、ユーザーが のバージョンをオーバーライドし始めると、これは壊れますstd::common_type
。それが起こらないと仮定すると、うまくいくでしょうか?条件演算子は、さらなる評価の前にプロモーションを適用することになっています。私は、いつかこのようなものが標準に含まれるべきだと思います。
なぜこれが必要なのか疑問に思っているなら、これは C レベルの可変引数用です。
auto r = va_arg( the_va_list, T );
s を sに変換するなど、varargs で使用すると変換される型を最初に渡した場合、 の元の型、またはマングルされた型をfloat
挿入する必要がありますか? 後者の場合は、そのための traits-type を作成しています。これには、最後のステップでプロモーション トレイトが必要です。double
T