Sí. El posible duplicado imprime el tamaño como mensaje de error, lo que significa que la compilación no tendrá éxito.
Sin embargo, mi solución imprime el tamaño como advertencia mensaje de advertencia, lo que significa que imprimirá el tamaño y la compilación continuará.
template<int N>
struct print_size_as_warning
{
char operator()() { return N + 256; } //deliberately causing overflow
};
int main() {
print_size_as_warning<sizeof(int)>()();
return 0;
}
mensaje de advertencia:
prog.cpp: In member function ‘char print_size_as_warning<N>::operator()() [with int N = 4]’:
prog.cpp:8: instantiated from here
prog.cpp:4: warning: overflow in implicit constant conversion
Demostración: http://www.ideone.com/m9eg3
Nota: el valor de N en el mensaje de aviso es el valor de sizeof (int)
El código anterior es uno mejorado, y mi primer intento fue la siguiente:
template<int N>
struct _{ operator char() { return N+ 256; } }; //always overflow
int main() {
char(_<sizeof(int)>());
return 0;
}
mensaje Advertencia:
prog.cpp: In member function ‘_<N>::operator char() [with int N = 4]’:
prog.cpp:5: instantiated from here
prog.cpp:2: warning: overflow in implicit constant conversion
Demostración: http://www.ideone.com/mhXjU
La idea está tomada de mi anterior respuesta a esta pregunta:
¿Es esto lo que estás buscando? http://stackoverflow.com/questions/2008398/is-it-possible-to-print-out-the-size-of-ac-class-at-compile-time – birryree
Muchos compiladores tienen un '# pragma' u otro directiva que puede usarse para generar valores durante la compilación. Deberá verificar la documentación de su compilador. Lamentablemente, no sé cómo hacer para que el compilador evalúe la expresión antes de que genere el resultado. –
No, es una pregunta diferente. –