If one alternative is larger than the others and it has an enum tag or pointer inside of it, such that you can squeeze the other alternatives before&#x2F;after that tag word, you&#x27;re good to go.  If you had multiple alternatives of maximum size, they&#x27;d need some word in them, at the same offset&#x2F;size, such that they don&#x27;t have conflicting representations.  An enum tag could overlap with a non-null pointer, and two enum tags with user-declared tag values (such that they do not overlap) could work too.  Or if you&#x27;re crazy you could discard having each type&#x27;s representation be computed solely as a function of what the type is made of, choosing their representations based on how well they pack into other types.  (Or worse yet, if you&#x27;ve got a borrow checker and your types are memcpyable, you could pack things and rejigger bytes however you wanted and then unfurl them into a temporary whenever something uses the interior value, <i>unless</i> I&#x27;m overlooking something.  So if you had Either&lt;Either&lt;u32, u32&gt;, Either&lt;u32, u32&gt;&gt;, you could represent that with a single tag whose value is 0, 1, 2, or 3, and when if the tag&#x27;s 2 or 3 and you make a reference to the interior value, either fix the tag in-place and fix it back when you&#x27;re done (if you&#x27;re the sole owner of the Either&lt;Either...&gt;), or copy the value out and let the borrower borrow that (and copy it back in when it&#x27;s done, if it was a mutable borrow).)