Declarações variáveis após as instruções if

Um problema surgiu em outro fórum e eu sabia como corrigi-lo, mas revelou um recurso do compilador peculiar a mim. A pessoa estava recebendo o erro "A instrução incorporada não pode ser uma declaração ou uma declaração rotulada" porque tinha uma declaração de uma variável após uma instrução if sem colchetes. Essa não era a intenção deles, mas eles haviam comentado a linha de código imediatamente após a instrução if, que tornou a declaração da variável a linha de código de fato a ser executada. Enfim, esse é o pano de fundo, o que me leva a isso.

O código a seguir é ilegal

if (true)
    int i = 7;

No entanto, se você colocar isso entre parênteses, é tudo legal.

if (true)
{
    int i = 7;
}

Nenhum pedaço de código é útil. No entanto, o segundo está OK. Qual é a explicação específica para esse comportamento?

questionAnswers(4)

yourAnswerToTheQuestion