Why is it possible to use the dereferencing operator multiple times when assigning a function to a function pointer?
<p>I was wondering about the specific reason for which it is possible to use multiple times the dereferencing operator <code>*</code> when we want to assign a function to a function pointer.<br>
As an example, the following code perfectly compiles and runs:</p>

<pre><code>#include &lt;iostream&gt;

void f() { std::cout &lt;&lt; "Hello World!" &lt;&lt; std::endl; }

int main() {
    void(*f_ptr)(void) = ***************************************f;
    f_ptr();
    return 0;
} 
</code></pre>