Ordem de expansão do pacote de parâmetros

Eu tenho 2 funções para ler arquivos binários.

1ª função lêsizeof(T) bytes do arquivo:

template<typename T>
T read() { ... some IO operations ... };

A segunda função chama primeiro uma várias vezes com cada parâmetro do modelo:

template<typename... Ts>
std::tuple<Ts...> read_all() {
    return std::make_tuple(read<Ts>()...);
};

Tudo funciona bem, exceto a primeira ordem de chamada de função. Para algo como

uint32_t a;
uint8_t b;
std::tie(a, b) = read_all<uint32_t, uint8_t>();

o primeiro será chamadoread<uint8_t>() e depois dissoread<uint32>() que inverte a ordem de passagem dos parâmetros do modelo e atrapalha a ordem dos bytes no arquivo.

Claro, eu posso ligarread_all com argumentos de ordem inversa dos modelos e obter a ordem correta no final, mas existe uma maneira mais óbvia de fazer isso?

questionAnswers(2)

yourAnswerToTheQuestion