Если на C++ 14, то можно без рекурсии.
#include <iostream>
#include <algorithm>
#include <initializer_list>
using namespace std;
struct A
{
char field_a;
A(): field_a('a') {}
};
struct B
{
double c;
B() : c(10.0) {}
};
struct D
{
int buffer[100];
D()
{
}
};
template <typename... Types>
constexpr auto get_sizes()
{
return initializer_list<size_t>{ sizeof(Types)... };
}
int main()
{
cout << max( get_sizes<A, B, D>() ) << endl;
}
Правда, я попробовал на VC++ онлайн компиляторе, код скомпилировался, но выдал какую-то ерунду.
А вот на GCC всё OK.