<p>Now that I am looking through the ISO C Standard (N1570) I see that casts from one pointer-to-function type to another pointer-to-function type and back again is actually well-defined (TIL):</p>
<pre><code>N1570/6.3.2.3p8 

A pointer to a function of one type may be converted to a pointer to
a function of another type and back again; the result shall copare
equal to the original pointer. If a converted pointer is used to
call a function whose type is not compatible with the pointed-to
type, the behavior is undefined.</code></pre>
<p>In other words, the quoted section from my previous post is errornous in the sense that “the likelyhood” is actually “guaranteed” (in ISO C, afaik there is no such clause in the ISO C++ Standard).</p>
<p>The wording in ISO C has not changed since the C89 draft.</p>
<hr style="height:1px;margin-bottom:20px;background-color:#ddd;color:#ddd" />
<p>On 16/02/22 20:59, Filip Roséen wrote:</p>
<blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<ol start="2" style="list-style-type: decimal">
<li>The likelyhood of different types of function-pointers having the same size is far greater than <code>sizeof(void*) == sizeof(void(*)())</code>.</li>
</ol>
</blockquote>