<div dir="auto"><div><br><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Sat, 13 Dec 2025, 11:04 Mike Reed 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"><u></u>

  
    
  
  <div>
    <p>Just  wrote something like this in my day to day c++ programming
      job:</p>
    <p><br>
    </p>
    <p>auto i = somemap.find(key);</p>
    <p>auto data = i-&gt;second.main_info;<br>
    </p>
    <p>somemap.erase(i);</p>
    <p>undecl i; // this would be really nice</p>
    <p>// go on to use `data`</p>
    <p><br>
    </p>
    <p>I&#39;m mindful that I really, really, don&#39;t want to accidentally use
      `i` later.  And not just me, some other poor dev who comes along
      later to update the &quot;go on to use data&quot; code, during a production
      panic, and tries to access &quot;i-&gt;second.meta_info&quot;.</p>
    <p><br>
    </p>
    <p>I have to say, c++ introduced the idea of being able to introduce
      an identifier anywhere in a block, so the idea of being able to
      remove an identifier anywhere after, does have a symmetry that
      feels right.</p></div></blockquote></div></div><div dir="auto"><br></div><div dir="auto">This is possible today using the _ identifier. </div><div dir="auto"><br></div><div dir="auto">auto _ = somemap.find(key);</div><div dir="auto">auto data = _-&gt;second.main_info;</div><div dir="auto">somemap.erase(_);</div><div dir="auto">int _ = 0;</div><div dir="auto"><br></div><div dir="auto">Now you have two _ variables in scope and so it&#39;s an error to refer to it. </div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote gmail_quote_container"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>
    <p><br>
    </p>
    <p>I agree that this should be purely about the identifier, not the
      object lifetime.</p>
    <p><br>
    </p>
    <p>Personally, I don&#39;t think it should be allowed to re-use that
      identifier later in the block.  To me that has all the same
      confusions and pitfalls that shadowing has.</p>
    <p><br>
    </p>
    <p>Mike.<br>
    </p>
    <p><br>
    </p>
    <p><br>
    </p>
    <div>On 13/12/2025 04:02, SD SH via
      Std-Proposals wrote:<br>
    </div>
    <blockquote type="cite">
      
      
      <p style="text-align:left;text-indent:0px;margin-top:0px;margin-bottom:0px">
        <span style="font-family:Arial,Verdana,sans-serif,serif,EmojiFont;font-size:12px;color:rgb(36,36,36)">&gt;Moving
          has to keep the object in a valid state.</span></p>
      <p style="text-align:left;text-indent:0px;margin-top:0px;margin-bottom:0px">
        <span style="font-family:Arial,Verdana,sans-serif,serif,EmojiFont;font-size:12px;color:rgb(36,36,36)">The
          destructor will be called same as origin.<br>
          <br>
        </span></p>
      <p style="text-align:left;text-indent:0px;margin-top:0px;margin-bottom:0px">
        <span style="font-family:Arial,Verdana,sans-serif,serif,EmojiFont;font-size:12px;color:rgb(36,36,36)">&gt;Calling
          the destructor would probably lead to double-destruction.</span></p>
      <p style="text-align:left;text-indent:0px;margin-top:0px;margin-bottom:0px">
        <span style="font-family:Arial,Verdana,sans-serif,serif,EmojiFont;font-size:12px;color:rgb(36,36,36)">Moving
          and destructing are additional operations. This feature not be
          used to do these things.<br>
          Calling destructor leads double-destruction. I hope there is a
          way to end objects early and explicitly if we need, but using
          obj.~T() or std::destruct_at(&amp;obj) may be incorrect.<br>
          <br>
          It isn&#39;t directly related to the feature we are talking, sorry
          that I talking far ahead.</span></p>
      <hr style="display:inline-block;width:98%">
      <div id="m_1618506830782526559divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>发件人:</b>
          Std-Proposals <a href="mailto:std-proposals-bounces@lists.isocpp.org" target="_blank" rel="noreferrer">&lt;std-proposals-bounces@lists.isocpp.org&gt;</a>
          代表 Sebastian Wittmeier via Std-Proposals
          <a href="mailto:std-proposals@lists.isocpp.org" target="_blank" rel="noreferrer">&lt;std-proposals@lists.isocpp.org&gt;</a><br>
          <b>发送时间:</b> 2025年12月13日 10:47<br>
          <b>收件人:</b> <a href="mailto:std-proposals@lists.isocpp.org" target="_blank" rel="noreferrer">std-proposals@lists.isocpp.org</a>
          <a href="mailto:std-proposals@lists.isocpp.org" target="_blank" rel="noreferrer">&lt;std-proposals@lists.isocpp.org&gt;</a><br>
          <b>抄送:</b> Sebastian Wittmeier
          <a href="mailto:wittmeier@projectalpha.org" target="_blank" rel="noreferrer">&lt;wittmeier@projectalpha.org&gt;</a><br>
          <b>主题:</b> Re: [std-proposals] 回复: 回复: 回复: [PXXXXR0] Add a New
          Keyword ‘undecl’</font>
        <div> </div>
      </div>
      
      <div>
        <p>The cleanest approach is to relocate (trivial relocatability
          was delayed for after C++26) the object into nothing.</p>
        <p> </p>
        <p>That would probably just destruct it, but the compiler would
          know, not to destruct it a second time.</p>
        <p> </p>
        <p>Moving has to keep the object in a valid state.</p>
        <p> </p>
        <p>Calling the destructor would probably lead to
          double-destruction.<br>
           </p>
        <blockquote style="border-left:2px solid rgb(50,95,186);padding-left:5px;margin-left:5px">
          -----Ursprüngliche Nachricht-----<br>
          <strong>Von:</strong> SD SH <a href="mailto:Z5515zwy@outlook.com" target="_blank" rel="noreferrer">&lt;Z5515zwy@outlook.com&gt;</a><br>
          <strong>Gesendet:</strong> Sa 13.12.2025 02:20<br>
          <strong>Betreff:</strong> Re: [std-proposals] 回复: 回复: 回复:
          [PXXXXR0] Add a New Keyword ‘undecl’<br>
          <strong>An:</strong> <a href="mailto:std-proposals@lists.isocpp.org" target="_blank" rel="noreferrer">std-proposals@lists.isocpp.org</a>; <br>
          <strong>CC:</strong> Sebastian Wittmeier
          <a href="mailto:wittmeier@projectalpha.org" target="_blank" rel="noreferrer">&lt;wittmeier@projectalpha.org&gt;</a>; <br>
          
          <div>
            <div dir="auto" style="font-size:12px;padding:5px;margin:0px;border-style:none;background-color:rgb(255,255,255);font-family:Arial,Verdana,sans-serif">
              Thinking of more cases, we can move the object, call the
              destructor, use std::destroy_at or just do nothing until
              it end, so changing lifetimes is not necessary and it will
              introduce trouble in managing a object.</div>
          </div>
        </blockquote>
      </div>
      <br>
      <fieldset></fieldset>
    </blockquote>
  </div>

-- <br>
Std-Proposals mailing list<br>
<a href="mailto:Std-Proposals@lists.isocpp.org" target="_blank" rel="noreferrer">Std-Proposals@lists.isocpp.org</a><br>
<a href="https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals" rel="noreferrer noreferrer" target="_blank">https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals</a><br>
</blockquote></div></div></div>

