arênteses alterando a semântica do resultado da chamada de função

Foi observado emoutra pergunt que agrupar o resultado de uma chamada de função PHP entre parênteses pode de alguma forma converter o resultado em uma expressão completa, de forma que o seguinte funcione:

<?php
error_reporting(E_ALL | E_STRICT);

function get_array() {
   return array();
}

function foo() {
   // return reset(get_array());
   //              ^ error: "Only variables should be passed by reference"

   return reset((get_array()));
   //           ^ OK
}

foo();

Estou tentando encontrar algo na documentação paraexplicitament e explique sem ambiguidade o que está acontecendo aqui. Diferente do C ++, eu não sei o suficiente sobre a gramática PHP e seu tratamento de instruções / expressões para derivá-l

Há algo oculto na documentação referente a esse comportamento? Caso contrário, alguém pode explicar isso sem recorrer à suposição?

Atualiza

Eu encontreithis EBNF pretendendo representar a gramática PHP e tentei decodificar meus scripts, mas acabou desistind

Então,usingphc para gerar um.dot arquivo dos doisfoo() variantes, euproduzid Imagens AST para ambos os scripts usando os seguintes comandos:

$ yum install phc graphviz
$ phc --dump-ast-dot test1.php > test1.dot
$ dot -Tpng test1.dot > test1.png
$ phc --dump-ast-dot test2.php > test2.dot
$ dot -Tpng test2.dot > test2.png

Nos dois casos, o resultado foi exatamente o mesmo:

questionAnswers(2)

yourAnswerToTheQuestion