【发布时间】:2012-09-05 21:27:10
【问题描述】:
为了看看它是如何工作的,我在标题 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;
};
我非常了解第一个、第二个和第四个声明的工作原理。但是,我无法理解第三个声明是如何工作的。有人能解释一下这里使用的机制吗?
【问题讨论】:
标签: c++ c++11 g++ typetraits