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 のような気がしますね.
ではどうすべきか
あんまり使わないのがいいんじゃないでしょうか.