He llegado al punto de practicar el static_assert(), entiendo ya como funciona y a que se refiere, seria basicamente una afirmacion a la fuerza y evaluada luego, si es falsa entonoces habra un error, si es verdadera, continuara con el programa.
Lo que entiendo (a diferencia de assert()) es que static_assert evalua en tiempo de compilacion, aqui esto no lo entiendo bien, a que se refiere con tiempo de compilacion ?.... mientras escribes el codigo o cuando haces el build? Si si, entiendo que esta pregunta es absurda, se supone que tiempo de compilacion es cuando haces build, pero lo pregunto por lo siguiente:
Resulta que estoy en Visual Studio 2017, al escribir:
Código
int main (){ static_assert(sizeof(int) == 4, "Su sistema no es de 64bits"); std::cout << "64 bits."; }
No me va ningun error, es decir, todo bien... pero si le cambio el valor 4 por 5, o por cualquier otro, de inmediato VS me lanza un error, y la descripcion del error es justamente el segundo argumento "Su sistema no es de 64bits", esto quiere decir que static_assert esta evaluando mientras escribo el codigo, no cuando hago build..
Esto definitivamente no puede ser ni tiempo de ejecucion, ni tiempo de compilacion, como le podriamos llamar??..
Editado:
Parece que es el compilador de Microsoft el que hace esta verificacion en el tiempo de edicion, GCC parece no tenerla, no sale el error hasta que le doy build... entonces SI que es en tiempo de compilacion, pero el compilador de MS te ahorra un poco mas de tiempo mostrandote mientras escribes...