Function-pointer syntax ambiguity
<p>Take the following example. I create a function pointer named <code>s</code>, set it to <code>f</code> and call it. This compiles fine of course:</p>

<pre><code>void f() {}

int main() {

    void (*s)();

    s = f;

    s();

}
</code></pre>

<p>But take this next example, where I declare <code>s</code> now as a "function reference" (if it's so called) and set to <code>f</code> inline. This compiles fine as well:</p>

<pre><code>void f() {}

int main() {

    void (&amp;s)() = f;

    s();

}
</code></pre>

<p>What are the differences between these two ways to create and initialize a function-pointer? Note that when I use the reference syntax I am required to initialize it "in-line" to <code>f</code> whereas with the "pointer" syntax I had the ability to do it both ways. Can you explain that as well? And with that, can you explain what their differences are in terms of usability, and when must I use one form over the other?</p>
