A few observations. Wouldn't be better where such niche ad-hoc conversions were expressed in Swift and only available if you are working in a module that contains them or imports it. For example, the conversions required for the call to computeDigest in the pitch could be expressed in these terms:
extension UnsafeMutablePointer where Pointee == UInt8 {
init(_ implicit: UnsafeMutableRawPointer) {
self.init(implicit.assumingMemoryBound(to: Pointee.self))
}
}
extension UnsafePointer where Pointee == UInt8 {
init(_ implicit: UnsafeRawPointer) {
self.init(implicit.assumingMemoryBound(to: Pointee.self))
}
}
which it begs the question why on earth should such a niche conversion be baked into the compiler if you care about type safety; all to avoid the moderate inconvenience of aliasing a pointer correctly.
The problem here arises because people are talking about a DAG implementation. Better to impose the "C++, one conversion rule" and this limitation is avoided and keeps the type checker out of trouble. There is already a working prototype that caters for this case without issue mentioned in the other thread
Finally, the PR for this bespoke change already contains more lines of code added than the other PR mentioned in the other thread fairly well advanced towards a more universal solution. More code, slower type checker. To my mind, time would be better spent fleshing the latter out sooner rather than later.