Even ignoring both rules, there is still no reason to expect the assertion not to fire:
int x = 2; assert(*(bool*)x == true);
float x = 2.0 assert(*(int*)x == 2);