Declaraciones variables que siguen a las declaraciones if

Surgió un problema en otro foro y supe cómo solucionarlo, pero reveló una característica del compilador peculiar para mí. La persona estaba recibiendo el error "La declaración incrustada no puede ser una declaración o una declaración etiquetada" porque tenía una declaración de una variable después de una declaración if sin corchetes. Esa no era su intención, pero habían comentado la línea de código inmediatamente después de la declaración if, lo que hizo que la declaración de variable fuera la línea de código de facto a ejecutar. De todos modos, ese es el trasfondo, lo que me lleva a esto.

El siguiente código es ilegal.

if (true)
    int i = 7;

Sin embargo, si envuelve eso entre paréntesis, todo es legal.

if (true)
{
    int i = 7;
}

Ninguna parte del código es útil. Sin embargo, el segundo está bien. ¿Cuál es específicamente la explicación de este comportamiento?

Respuestas a la pregunta(4)

Su respuesta a la pregunta