<div dir="ltr"><div dir="ltr">On Wed, Aug 26, 2020 at 1:34 PM Richard Smith <<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">This is certainly not something we could do for the libc++ stable ABI. Maybe for the unstable ABI, but given the above change only makes layout worse, it's not clear that there would be a strong motivation. We already give std::pair trivial copy/move construction and trivial destruction whenever possible, so we can pass and return it efficiently.<br></div></div></blockquote><div><br></div><div>Our motivation is that in the heterogeneous computing world (for instance in SYCL/DPC++), trivially copyable is used to copy things between hosts and devices (CPU and GPU).</div><div><br></div><div>There is an expectation that standard library wrapper types (pair, tuple, optional, variant, etc.) don't break trivialness.  This is especially true of pair, which most people expect to be "just a struct" of two public types.</div></div>-- <br><div dir="ltr"><div dir="ltr"> Nevin ":-)" Liber  <mailto:<a href="mailto:nevin@eviloverlord.com" target="_blank">nevin@cplusplusguy.com</a>>  +1-847-691-1404<br></div></div></div>