Por que você não pode declarar uma variável dentro da parte da expressão de um loop do while?

A seguinte sintaxe é válida:

while (int i = get_data())
{
}

Mas o seguinte não é:

do
{
} while (int i = get_data());

Podemos ver por que, através do rascunho do padrãoN4140 seção6.4:

1 [...]

condition:
     expression
     attribute-specifier-seqopt decl-specifier-seq declarator = initializer-clause
     attribute-specifier-seqopt decl-specifier-seq declarator braced-init-list

2 As regras de condições se aplicam tanto ainstruções de seleção e para ofor ewhile declarações (6.5). [...]

e seção6.5

1 As instruções de iteração especificam o loop.

      iteration-statement: 
             while ( condition ) statement
             do statement while ( expression ) ;

Em vez disso, você é forçado a fazer algo feio como:

int i = get_data();
do
{
} while ((i = get_data())); // double parentheses sic

Qual é a justificativa para isso?