<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'><p class="MsoNormal"><font color="#1f497d">Hi, my project code (linux, Clang as compiler and LLVM libcxx as c++ library) will have the execution of x=std::move(x) in some code path (not directly, but sometimes it will happen via levels of function calls and parameter-pass by reference, etc.), and it turns out x is cleared after this x = std::move(x). I tried gnu c++ library, and msvc c++ library (on windows), both keep x untouched. </font></p><p class="MsoNormal"><font color="#1f497d"><br></font></p><p class="MsoNormal"><font color="#1f497d">I am wondering if this could be fixed in LLVM libcxx, as it seems making more sense not to clear x when moving x to itself. Thanks. Below is a sample code for repro.  </font><span style="color: rgb(31, 73, 125); font-size: 12pt;">Thanks a lot. </span></p><p class="MsoNormal"><font color="#1f497d"><br></font></p><p class="MsoNormal"><span style="color:#1F497D">#include <iostream></span></p><p class="MsoNormal"><span style="color:#1F497D">using namespace std;</span></p><p class="MsoNormal"><span style="color:#1F497D"><br></span></p><p class="MsoNormal"><span style="color:#1F497D">class Test</span> <span style="color: rgb(31, 73, 125); font-size: 12pt;">{</span></p><p class="MsoNormal"><o:p></o:p></p>

<p class="MsoNormal"><span style="color:#1F497D">public:</span><o:p></o:p></p>

<p class="MsoNormal"><span style="color:#1F497D">    Test()</span><span style="color: rgb(31, 73, 125); font-size: 12pt;"> :
x("test") </span><span style="color: rgb(31, 73, 125); font-size: 12pt;"> {</span><span style="color: rgb(31, 73, 125); font-size: 12pt;"> } </span></p><p class="MsoNormal"><o:p></o:p></p>

<p class="MsoNormal"><span style="color:#1F497D"> </span><span style="color: rgb(31, 73, 125); font-size: 12pt;">   void MoveX()</span><span style="color: rgb(31, 73, 125); font-size: 12pt;"> {</span></p><p class="MsoNormal"><o:p></o:p></p>

<p class="MsoNormal"><span style="color:#1F497D">      
cout << "before x=move(x), x : " << x;</span><o:p></o:p></p>

<p class="MsoNormal"><span style="color:#1F497D">       x=move(x);</span><o:p></o:p></p>

<p class="MsoNormal"><span style="color: rgb(31, 73, 125); font-size: 12pt;">       cout << "after x=move(x), x : " << x;</span><span style="color: rgb(31, 73, 125); font-size: 12pt;"> </span></p><p class="MsoNormal"><span style="color: rgb(31, 73, 125); font-size: 12pt;">    }</span></p><p class="MsoNormal"><span style="color: rgb(31, 73, 125); font-size: 12pt;">private:</span></p><p class="MsoNormal"><o:p></o:p></p>

<p class="MsoNormal"><span style="color:#1F497D">    string x;</span><o:p></o:p></p>

<p class="MsoNormal"><span style="color:#1F497D">};</span><o:p></o:p></p><p class="MsoNormal"><span style="color:#1F497D"><br></span></p><p class="MsoNormal"><span style="color:#1F497D">int main(int argc, char** argv)</span></p><p class="MsoNormal"><span style="color:#1F497D">{</span></p><p class="MsoNormal"><span style="color:#1F497D">    Test test;</span></p><p class="MsoNormal"><span style="color:#1F497D">    test.MoveX();</span></p><p class="MsoNormal"><span style="color:#1F497D">    return 0;</span></p><p class="MsoNormal"><span style="color:#1F497D">}</span></p><p class="MsoNormal"><span style="color:#1F497D"><br></span></p><p class="MsoNormal"><font color="#1f497d">The output would be like </font></p><p class="MsoNormal"><span style="color: rgb(31, 73, 125);"><br></span></p><p class="MsoNormal"><span style="color: rgb(31, 73, 125);">before x=move(x), x : test</span></p><p class="MsoNormal"><span style="color: rgb(31, 73, 125);">after x=move(x), x : </span></p>                                           </div></body>
</html>