Parentheses que alteran la semántica del resultado de la llamada de función

Se observó enotra pregunt que envolver el resultado de una llamada de función PHP entre paréntesis de alguna manera puede convertir el resultado en una expresión completa, de modo que lo siguiente 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();

Estoy tratando de encontrar algo en la documentación paraexplícitament y explica inequívocamente lo que está sucediendo aquí. A diferencia de C ++, no sé lo suficiente sobre la gramática PHP y su tratamiento de las declaraciones / expresiones para derivarlo yo mismo.

¿Hay algo oculto en la documentación sobre este comportamiento? Si no, ¿alguien más puede explicarlo sin recurrir a la suposición?

Actualiza

Primero encontréeste EBNF pretendiendo representar la gramática PHP, e intenté decodificar mis scripts, pero finalmente me di por vencido.

Luego,utilizandophc para generar un.dot archivo de los dosfoo() variantes, I producido Imágenes AST para ambos scripts utilizando los siguientes 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

En ambos casos, el resultado fue exactamente el mismo:

Respuestas a la pregunta(2)

Su respuesta a la pregunta