Considere el siguiente códigoCómo escribir una plantilla std :: bitset que funciona en 32 y 64 bits
template<unsigned int N> void foo(std::bitset<N> bs)
{ /* whatever */ }
int main()
{
bitset<8> bar;
foo(bar);
return 0;
}
g ++ se queja de esto en 64 bits porque el < 8> consigue interpretarse como un entero largo sin signo , que no coincide exactamente con la plantilla. Si cambio la plantilla para decir unsigned long int, entonces las compilaciones de 32 bits se quejan.
Obviamente, una manera de solucionar este problema es cambiar bitset < 8> a BitSet < 8ul>, pero ¿hay alguna manera de volver a escribir la plantilla parte por lo que va a trabajar con lo que la interpretación por defecto de un valor numérico literal es?
aún más el problema es que no puedo hacerlo plantilla porque entonces el Bitset se queja de que su argumento debe ser unsigned int –