How exactly does the standard define that, for example, float (*(*(&e)[10])())[5]
declares a variable of type \"reference to array of 10 pointer to function
Here's the way I parse float const (*(*(&e)[10])())[5]
. First of all, identify the specifier. Here the specifier is float const
. Now, let's look at the precedence. [] = () > *
. The parentheses are used to disambiguate the precedence. With precedence in mind, let's identify the variable ID, which is e
. So, e is a reference to an array (since [] > *
) of 10 pointers to functions (since () > *
) which take no argument and return and a pointer to an array of 5 float const. So the specifier comes last and rest are parsed according to the precedence.