以下は、 の特殊化の 1 つですstd::common_type
。
template <class T, class U>
struct common_type<T, U> {
typedef decltype(true ? declval<T>() : declval<U>()) type;
};
私の考えでは、条件ステートメントは不要です。に対してチェックしている場合true
、式は常に に解決されdeclval<T>()
ませんか? もしそうなら、返されたtypedefはどのように定義を正当化します...
「すべての型の間で共通の型を決定します
T...
。これは、すべてT...
が暗黙的に変換できる型です。」
誰かが条件文を説明してもらえますか? チェックtrue
が不要であり、条件が常に最初のオペランドに解決されることは正確ですか? もしそうなら、返される型はどのように定義を満たしますか?