<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class="">
<div><br class=""><blockquote type="cite" class=""><div class="">On Dec 17, 2018, at 11:10 AM, Chris Dumez <<a href="mailto:cdumez@apple.com" class="">cdumez@apple.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html; charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class="">
<div class=""><br class=""><blockquote type="cite" class=""><div class="">On Dec 17, 2018, at 10:27 AM, Alex Christensen <<a href="mailto:achristensen@apple.com" class="">achristensen@apple.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html; charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class=""><blockquote type="cite" class=""><div class=""><blockquote type="cite" class=""><div class=""><div class="" style="caret-color: rgb(0, 0, 0);"><blockquote type="cite" class=""><div class=""><div class=""><blockquote type="cite" class=""><div class="">On Dec 14, 2018, at 1:37 PM, Chris Dumez <<a href="mailto:cdumez@apple.com" class="">cdumez@apple.com</a>> wrote:</div></blockquote></div><div class=""><blockquote type="cite" class=""><div class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;"><div class=""><br class=""></div><div class="">As far as I know, our convention in WebKit so far for our types has been that types getting moved-out are left in a valid “empty” state.</div></div></div></blockquote></div></div></blockquote></div></div></blockquote></div></blockquote>This is not necessarily true.  When we move out of an object to pass into a function parameter, for example, the state of the moved-from object depends on the behavior of the callee.  If the callee function uses the object, we often have behavior that leaves the object in an “empty” state of some kind, but we are definitely relying on fragile undefined behavior when we do so because changing the callee to not use the parameter changes the state of the caller.  We should never assume that WTFMove or std::move leaves the object in an empty state.  That is always a bug that needs to be replaced by std::exchange.</div></div></div></div></blockquote><div class=""><br class=""></div><div class="">Feel like we’re taking about different things. I am talking about move constructors (and assignment operators), which have a well defined behavior in WebKit. And it seems you are talking about WTFMove(), which despite the name does not “move” anything, it is merely a cast.</div><div class="">In the case you’re talking about the caller does NOT call the move constructor, it merely does a cast so I do not think your comment invalidates my statement. Note that in my patch, I was nearly WTFMove()ing the data member and assigning it to a local variable right away, calling the move constructor.</div></div></div></div></blockquote><div><br class=""></div><div>Also note that may of us already rely on our move constructors’ behavior, just search for WTFMove(m_responseCompletionHandler) in:</div><div><a href="https://trac.webkit.org/changeset/236463/webkit" class="">https://trac.webkit.org/changeset/236463/webkit</a></div></div></body></html>