Expansiones del paquete de plantillas variables

In Andrei habla sobre GoingNative 2012 él habla sobre Plantillas Variadas, y explica en un punto a través del ejemplo debajo de cómo funcionan las expansiones de paquetes de parámetros. Al ser bastante nuevo en este tema, me resultó bastante difícil seguir cómo funciona cada caso, ¿podría alguien explicarme cómo funciona la expansión en cada llamada de función degun?

template<class... Ts> void fun(Ts... vs) {
    gun(A<Ts...>::hun(vs)...);
    gun(A<Ts...>::hun(vs...));
    gun(A<Ts>::hun(vs)...);
}