为了看看它是如何工作的,我查看std::common_type
了 header 中的 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;
};
我很了解第一个、第二个和第四个声明是如何工作的。但是,我无法理解第三个声明是如何工作的。有人可以尝试解释这里使用的机制吗?