Si consideri il seguente codiceCome scrivere un template std :: bitset che funziona su 32 e 64-bit
template<unsigned int N> void foo(std::bitset<N> bs)
{ /* whatever */ }
int main()
{
bitset<8> bar;
foo(bar);
return 0;
}
g ++ lamenta questo su 64 bit perché il < 8> verrà interpretato come un long int unsigned , che non corrisponde esattamente al modello. Se cambio il modello per dire unsigned long int, allora le compilazioni a 32 bit si lamentano.
Ovviamente un modo per risolvere questo problema è quello di cambiare bitset < 8> per BitSet < 8ul>, ma c'è un modo per riscrivere il parte modello in modo che che possa funzionare con qualunque sia l'interpretazione di default di un numerica è letterale?
l'ulteriore problema è che non posso farlo modello perché allora la bitset si lamenta che il suo argomento deve essere un int unsigned –