只是为了了解它的工作原理,我查看了头文件type_traits
中std::common_type
的libstdc++实现。 我必须承认,我不太明白它是如何工作的。 这是它的代码:
/// 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;
};
我很好地理解了第一个、第二个和第四个声明是如何工作的。然而,我无法理解第三个声明是如何工作的。有人可以尝试解释一下这里使用的机制吗?