NicolaiM.Josuttisによる本「TheCppstandardlibrary」、第2版では、構造体の共通型の定義は次のようになっています(5.4、p.125)。
template <typename T1, typename T2>
struct common_type<T1,T2> {
typedef decltype(true ? declval<T1>() : declval<T2>()) type;
};
これがcommon_typeの正しい定義であると信じるのに深刻な問題があります。理由:
typedef decltype(true ? declval<T1>() : declval<T2>()) type;//As far as I understand this will always pick second operand, declval<T1>(), due to the fact that there is 'true' value. Am I right?