从可变参数类型列表中获取最大类型

Vit*_*meo 2 c++ templates variadic-templates c++11 c++14

我试图从可变参数模板类型列表中获取最大的类型.我得到了意想不到的结果:

// Bigger between two types
template<typename T1, typename T2> 
using Bigger = std::conditional_t<sizeof(T1) >= sizeof(T2), T1, T2>;

// Recursion helper
template<typename...> 
struct BiggestHelper;

// 2 or more types
template<typename T1, typename T2, typename... TArgs> 
struct BiggestHelper<T1, T2, TArgs...>
{
    using Type = Bigger<T1, BiggestHelper<T2, TArgs...>>;
};

// Exactly 2 types
template<typename T1, typename T2> 
struct BiggestHelper<T1, T2>
{
    using Type = Bigger<T1, T2>;
};

// Exactly one type
template<typename T> 
struct BiggestHelper<T>
{
    using Type = T;
};

template<typename... TArgs> 
using Biggest = typename BiggestHelper<TArgs...>::Type;
Run Code Online (Sandbox Code Playgroud)

以下是结果示例:

sizeof(double) -> 8
sizeof(Biggest<int, char, long, std::string, long long, double>) -> 4
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我希望返回一个大于4的数字.

T.C*_*.C. 9

类型应该是T1其余类型中较大和最大的类型,而不是更大的T1BiggestHelper</*...*/>(这是一个空结构).此外,对于记录,列表中最大的类型几乎可以肯定std::string,而不是double.

template<typename T1, typename T2, typename... TArgs> 
struct BiggestHelper<T1, T2, TArgs...>
{
    using Type = Bigger<T1, typename BiggestHelper<T2, TArgs...>::Type>;
                          //^^^^^^^^^                           ^^^^^^
};
Run Code Online (Sandbox Code Playgroud)

演示.