<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, 30 Nov 2024 at 17:30, James via Std-Proposals &lt;<a href="mailto:std-proposals@lists.isocpp.org">std-proposals@lists.isocpp.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Well, I can&#39;t say anything about being implementation defined or not. What I can say is it&#39;s currently impossible, so for this to work either standard needs to expand or make it implementation defined. <br>std::bit_cast creates copies which is not the same thing. <br>My main issue with the current state of the language is, you can do these things at runtime.</div></blockquote><div><br></div><div>What things? You haven&#39;t actually given an example of what you&#39;re doing at runtime and want to do at compile-time. Most type punning is not actually valid C++, although it depends exactly what you mean by type punning.<br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"> I have various constructs that make use of type punning, but I can&#39;t use any of them at compile time. I need to have an alternative that solves the same problem to be able to do it in compile time. Even then behaviour isn&#39;t exactly the same.<br><br>Regarding UB, compilers have all the information about literally anything when it&#39;s executed at compile time. Compilers are smart, they can handle it.<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Nov 30, 2024 at 1:45 PM Sebastian Wittmeier via Std-Proposals &lt;<a href="mailto:std-proposals@lists.isocpp.org" target="_blank">std-proposals@lists.isocpp.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><u></u>

  
  
  
  

<div>
<p>The current typeless memory is either</p><p> - std::byte, char, unsigned char</p><p> </p><p>As compile-time evaluation tries to avoid UB nearly completely and also tries to not use any implementation-defined features, there is less room for low-level inspection or modification.</p><p> </p><p>There is also constexpr std::bit_cast</p><p> </p><p>What usage examples do you have for the typeless_memory, which are not implementation-defined, allow the compiler to check and avoid UB (which e.g. entails an understanding of object lifetimes, types and memory locations) and which cannot be solved with the current tools in the standard library?</p><p><br> </p><blockquote style="border-left:2px solid rgb(50,95,186);padding-left:5px;margin-left:5px">-----Ursprüngliche Nachricht-----<br><b>Von:</b>	James via Std-Proposals &lt;<a href="mailto:std-proposals@lists.isocpp.org" target="_blank">std-proposals@lists.isocpp.org</a>&gt;<br><b>Gesendet:</b>	Sa 30.11.2024 10:56<br><b>Betreff:</b>	[std-proposals] std::typeless_memory (type punning)<br><b>An:</b>	<a href="mailto:std-proposals@lists.isocpp.org" target="_blank">std-proposals@lists.isocpp.org</a>; <br><b>CC:</b>	James &lt;<a href="mailto:james.business.84@gmail.com" target="_blank">james.business.84@gmail.com</a>&gt;; <br>  <div dir="ltr">Currently you can do whatever you want at runtime when it comes to type punning. Sure, all of them might not be safe, but you have some ways to do it safely. However in compile time (as far as I know) there is no way to achieve type punning.<div><br>So I&#39;d like to see this type, in standard library<br><a href="https://godbolt.org/z/1dEjYW1hW" title="Dieser externe Link wird in einem neuen Fenster geöffnet" target="_blank">https://godbolt.org/z/1dEjYW1hW</a><br><br>It&#39;s only purpose is to allow treating some underlying memory as whatever type you want in compile time without using extra memory. It would also provide a shortcut for runtime usage<br>Currently you can&#39;t achieve that due to placement new and reinterpret_cast not being usable in compile time context</div></div> <pre>-- 
 Std-Proposals mailing list
 <a href="mailto:Std-Proposals@lists.isocpp.org" target="_blank">Std-Proposals@lists.isocpp.org</a>
 <a href="https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals" target="_blank">https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals</a>
 </pre>  </blockquote>
</div>
-- <br>
Std-Proposals mailing list<br>
<a href="mailto:Std-Proposals@lists.isocpp.org" target="_blank">Std-Proposals@lists.isocpp.org</a><br>
<a href="https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals" rel="noreferrer" target="_blank">https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals</a><br>
</div></blockquote></div>
-- <br>
Std-Proposals mailing list<br>
<a href="mailto:Std-Proposals@lists.isocpp.org" target="_blank">Std-Proposals@lists.isocpp.org</a><br>
<a href="https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals" rel="noreferrer" target="_blank">https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals</a><br>
</blockquote></div></div>

