Existe alguma maneira de calcular a largura de um tipo inteiro no tempo de compilação?

O tamanho de um tipo inteiro (ou qualquer tipo) em unidades dechar/ bytes é facilmente calculado comosizeof(type). Um idioma comum é multiplicar porCHAR_BIT para encontrar o número de bits ocupados pelo tipo, mas em implementações com bits de preenchimento, isso não será igual aolargura em bits de valor. Pior ainda, código como:

x>>CHAR_BIT*sizeof(type)-1

pode realmente ter um comportamento indefinido seCHAR_BIT*sizeof(type) é maior que a largura real detype.

Para simplificar, vamos assumir que nossos tipos não são assinados. Então a largura detype éceil(log2((type)-1). Existe alguma maneira de calcular esse valor como uma expressão constante?

questionAnswers(7)

yourAnswerToTheQuestion