std::common_type の問題点

SFINAE に使えない

http://d.hatena.ne.jp/gintenlabo/20110420/1303288950
メタプログラミングをする上で不便ですね.

必ずしも「引数の型全てが変換される型」を返すとは限らない
struct A
{
    A(int) {}
    
    template <class T>
    A(T) = delete;
};

char c = '$';
std::common_type<char, int, A>::type a = c;
// エラー,delete されたコンストラクタの呼び出し

std::common_type の特殊化では対応できません (しきれません).

あいまいな特殊化をしている

c++ - Partial specialization of variadic templates - Stack Overflow
14.8.2.5/9 に照らし合わせると,引数2つの特殊化があいまいになってしまいます.

std::common_type<char, int>::type i = c; // エラー,あいまい

規格の defect でしょうか.

Reference を返す場合がある

「や」の字: 【C++11】 decltype, conditional operator, そして common_type
これも defect のような気がしますね.

ではどうすべきか

あんまり使わないのがいいんじゃないでしょうか.