1

プロモーションがいつ行われるか、それが何であるかを知る必要があります。私の推測では

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 を作成しています。これには、最後のステップでプロモーション トレイトが必要です。doubleT

4

1 に答える 1