[prev in list] [next in list] [prev in thread] [next in thread] 

List:       cfe-commits
Subject:    Re: [PATCH] D11394: Fix warnings about pessimizing return moves for C++11 and higher
From:       Richard Smith <richard () metafoo ! co ! uk>
Date:       2015-07-22 0:35:32
Message-ID: CAOfiQqnP1sa6Sh4eAFge575DH-OOe8Qf+5zL6UEWDP6qY+ZYag () mail ! gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


On Tue, Jul 21, 2015 at 5:29 PM, Eric Fiselier <eric@efcs.ca> wrote:

> EricWF added a comment.
>
> Thanks for the patch. I ran into this issue the other day and I'm glad to
> see it fixed.
>
> A little rational: The explicit move's are needed in order to "move" a
> `unique_ptr` in C++03. There is a special definition of `std::move` in
> memory at line 3100 that performs some hacks to make `unique_ptr` movable.
> I don't think any other classes benefit from the "explicit move" in C++03.


I don't think that's right. In C++03, unique_ptr has a
unique_ptr(unique_ptr&) constructor. And the C++03 std::move is:

  template<typename T> T &move(T &v) { return v; }

So... the "explicitly moved for C++03" call to std::move in map appears to
also be redundant (and pessimizing) in C++03. In fact, in C++03, std::move
appears to *always* be a no-op.

[Attachment #5 (text/html)]

<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Jul 21, 2015 \
at 5:29 PM, Eric Fiselier <span dir="ltr">&lt;<a href="mailto:eric@efcs.ca" \
target="_blank">eric@efcs.ca</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" \
style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">EricWF added a \
comment.<br> <br>
Thanks for the patch. I ran into this issue the other day and I&#39;m glad to see it \
fixed.<br> <br>
A little rational: The explicit move&#39;s are needed in order to &quot;move&quot; a \
`unique_ptr` in C++03. There is a special definition of `std::move` in memory at line \
3100 that performs some hacks to make `unique_ptr` movable. I don&#39;t think any \
other classes benefit from the &quot;explicit move&quot; in \
C++03.</blockquote><div><br></div><div>I don&#39;t think that&#39;s right. In C++03, \
unique_ptr has a unique_ptr(unique_ptr&amp;) constructor. And the C++03 std::move \
is:</div><div><br></div><div>   template&lt;typename T&gt; T &amp;move(T &amp;v) { \
return v; }</div><div><br></div><div>So... the &quot;explicitly moved for C++03&quot; \
call to std::move in map appears to also be redundant (and pessimizing) in C++03. In \
fact, in C++03, std::move appears to *always* be a no-op.<br></div></div></div></div>



_______________________________________________
cfe-commits mailing list
cfe-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic