¿Qué debería pasar con la negación de un size_t (es decir, `-sizeof (struct foo)`))?

Estoy tratando con un código en el trabajo que incluye una expresión del formulario

-(sizeof(struct foo))

es decir, la negación de unsize_t, y no tengo claro qué requieren los compiladores cuando ven los estándares C y C ++. En concreto, de mirar por aquí y en otros lugares,sizeof devuelve un valor integral sin signo de tiposize_t. No puedo encontrar ninguna referencia clara para un comportamiento específico al negar un entero sin signo. ¿Hay alguna, y si es así, qué es?

Edit: Ok, entonces hay algunas buenas respuestas con respecto a la aritmética en tipos sin firma, pero no está claro que esto sea así. Cuando esto se anula, ¿funciona en un entero sin signo, o se convierte en un tipo con signo y hace algo con eso? ¿Es el comportamiento que se espera de los estándares "imagina que es el número negativo de magnitud similar y luego se aplican las reglas de 'desbordamiento' para valores sin firma"?