Como escrever um modelo std :: bitset que funcione em 32 e 64 bits

Considere o seguinte código

template<unsigned int N> void foo(std::bitset<N> bs)
{ /* whatever */ }

int main()
{
    bitset<8> bar;
    foo(bar);
    return 0;
}

@ g ++ reclama disso em 64 bits porque o <8> é interpretado como um int longo sem sinal, que não corresponde exatamente ao modelo. Se eu alterar o modelo para dizer int longo não assinado, as compilações de 32 bits reclamarã

Obviamente, uma maneira de corrigir isso é mudar o conjunto de bits <8> para o conjunto de bits <8ul>, mas existe alguma maneira de reescrever omodel parte para que funcione com a interpretação padrão de um literal numéric

questionAnswers(3)

yourAnswerToTheQuestion