それがどのように機能するかを見てみると、のstd::common_type
のlibstdC++の実装を見てきました。私はそれがどのように動作するのか本当に理解していないことを認めなければならない。ここには:std :: common_type implementation
/// 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番目の宣言の仕組みを理解することはできません。誰かがここで使用されているメカニズムを説明しようと思いますか?
+1、三項演算子を含む*魔法*の読み方:[条件付き愛:FOREACH還元](http://www.artima.com/cppsource/foreach.html) –
トリック。したがって、3項演算子はそのオペランドに基づいて戻り値の型を推定するという事実に依存します。それはそれを考えなかった。ありがとう! – Morwenn