So what&#39;s in it for us as Swift devs?<br><br>It may be technically undefined behaviour (by that I think you mean there&#39;s no real knowing what could happen), but it seems to be rampant throughout pretty much all the C code I&#39;ve come in contact with (I&#39;m less familiar with C++).<br><br>If we lose type information by calling a C API that takes a void pointer, how can we hope to retrieve it in any safe way, other than saying &quot;we assume with good reason and hope to hell that this is what we say it is&quot;. And if we can&#39;t do that, what advantage does this proposal provide over what we already have?<br><div class="gmail_quote"><div dir="ltr">Joe Groff &lt;<a href="mailto:jgroff@apple.com">jgroff@apple.com</a>&gt; schrieb am Mo., 9. Mai 2016 um 22:16:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
&gt; On May 9, 2016, at 12:38 PM, Geordie Jay via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;<br>
&gt; I read this proposal and I&#39;m a bit unsure what its purpose would be:<br>
&gt;<br>
&gt; Basically you want to prevent UnsafePointer&lt;XYZ&gt;(UnsafePointer&lt;Void&gt;) conversions and/or vice-versa? And you&#39;d achieve this by replacing UnsafePointer&lt;Void&gt; with UnsafeBytePointer that has no bound pointer type?<br>
&gt;<br>
&gt; In one sense the change seems fine to me, but as someone who uses a lot of C APIs and a lot of CoreAudio/CoreMIDI in Swift already I can&#39;t really see what benefit it&#39;d bring. Presumably we&#39;d still want an option of converting UnsafeBytePointer to UnsafePointer&lt;SomeActualType&gt; for things like C function pointer callback &quot;context&quot;/&quot;userInfo&quot; uses, so it&#39;s not like we&#39;d be preventing programmer error in that way.<br>
&gt;<br>
&gt; Call me conservative but to me the current system seems to work as well as it can. If anything it&#39;s already enough boilerplate going through hoops converting an UnsafeMutablePointer&lt;Void&gt; into a [Float] even when I know and the C API knows perfectly well what it actually contains... Would happily be convinced otherwise about this proposal though, I&#39;m pretty new at all this.<br>
&gt;<br>
&gt; Geordie<br>
<br>
&gt; On May 9, 2016, at 12:57 PM, Guillaume Lessard via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;<br>
&gt; I’m sympathetic to the elimination of UnsafePointer&lt;Void&gt; as general shorthand for an arbitrary pointer, but I lose the plot of this very long proposal. It seems to me that this increases API surface, yet everything I could do before, I could still do; it just involves more typing. What exactly does this make better?<br>
&gt;<br>
&gt; Cheers,<br>
&gt; Guillaume Lessard<br>
<br>
Andy, I think it&#39;s worth clarifying the primary purpose of this proposal. Our main goal here is to provide a legal means for &quot;type-punning&quot; memory access. Like C and C++, it&#39;s technically undefined behavior in Swift to cast an UnsafePointer&lt;T&gt; to an UnsafePointer&lt;U&gt; of a different type and load a value out of memory that&#39;s of a different type from what was stored there. We don&#39;t take much advantage of this yet in Swift&#39;s optimizer, since we don&#39;t have good alternative API. UnsafeBytePointer seeks to fill this gap by providing a type that can safely do type-punned loads and stores.<br>
<br>
-Joe</blockquote></div>