title: Does the 'offsetof' macro from <stddef.h> invoke undefined behaviour?
body: <p>Example from MSVC's implementation:</p>
  
  <pre><code>#define offsetof(s,m) \
      (size_t)&amp;reinterpret_cast&lt;const volatile char&amp;&gt;((((s *)0)-&gt;m))
  //                                                   ^^^^^^^^^^^
  </code></pre>
  
  <p>As can be seen, it dereferences a null pointer, which normally invokes undefined behaviour. Is this an exception to the rule or what is going on?</p>