std::common_type
それがどのように機能するかを確認するために、ヘッダーの libstdc++ 実装を調べましたtype_traits
。私はそれがどのように機能するかを本当に理解していないことを認めなければなりません。ここにあります:
/// common_type
template<typename... _Tp>
struct common_type;
template<typename _Tp>
struct common_type<_Tp>
{ typedef _Tp type; };
template<typename _Tp, typename _Up>
struct common_type<_Tp, _Up>
{ typedef decltype(true ? declval<_Tp>() : declval<_Up>()) type; };
template<typename _Tp, typename _Up, typename... _Vp>
struct common_type<_Tp, _Up, _Vp...>
{
typedef typename
common_type<typename common_type<_Tp, _Up>::type, _Vp...>::type type;
};
第 1 宣言、第 2 宣言、第 4 宣言の仕組みがよくわかりました。ただし、3 番目の宣言がどのように機能するかを理解することはできません。誰かがここで使われているメカニズムを説明してくれませんか?