 fine in C.</p>

<p>&ldquo;Almost-standard-layout&rdquo; C++ types have these requirements:</p>

<ol>
<li>No virtual functions or virtual base classes i.e.
<a href="http://en.cppreference.com/w/cpp/types/is_polymorphic"><code>std::is_polymorphic_v&lt;T&gt;</code></a>
must be false. This is because the vptrs offset the proper front of the data layout
in an unknowable way to C.</li>
<li>Non-static data members of reference type appear to C as pointers. You
must never supply from C to C++ a non-null pointer wh