Great link, it looks as though many of our Try<T> / Option<T> / Result<T> /
Future<T> functions that return different results based on parameters /
runtime conditions (e.g. t, None(), Error("..."), Failure("...")) will not
have copies elided via NRVO? (these look similar to cases N and O in the
doc).On Mon, Mar 30, 2015 at 3:43 PM, Cody Maloney <[email protected]> wrote: > There is a fairly comprehensive overview of what compilers do / don't do > for RVO + NRVO at: > > http://www.byte-physics.de/index.php?eID=tx_nawsecuredl&u=0&g=0&t=1427845187&hash=d85e8402f1e5b835e3ff4f266a0a7256516ea57e&file=fileadmin/user_upload/kundenbereich/copy-elision-revisited-v1.0.pdf > > Move constructors you'll likely still have to copy some of the data (The > size of the vector for instance), but you save copying anything that is > pointed in (the data in the vector). Definitely it makes it a lot cheaper > for a lot of things, and things smaller than 1024 bytes most likely the > copy is cheaper than any sort of reference scheme on a modern processor. > > > > > On Mon, Mar 30, 2015 at 3:31 PM, Benjamin Mahler < > [email protected]> > wrote: > > > IIRC, it was when we changed Option:::get to return a const ref. Some > > callers of 'Option<V> hashmap<K,V>::get()' were grabbing a const ref to > the > > temporary coming from the option (case 1 in your markdown), and it then > > became a temporary to a temporary's member (case 2 in your markdown): > > > > E.g.: https://reviews.apache.org/r/18386/diff/#6 > > > > Re: optimizations > > > > Do you know what the state of the art is for RVO and NRVO? When is the > > compiler unable to perform these optimizations? > > I noticed you didn't mention move constructors. It looks like move > > constructors guarantee we elide the copy into the caller's object, which > > seems to be the whole motivation behind capturing a const ref? > > > > On Mon, Mar 30, 2015 at 12:15 PM, Jie Yu <[email protected]> > wrote: > > > > > I am a +1 on this too. We had a similar bug long time ago when we > changed > > > the return value of Try::get() to be const ref. > > > > > > On Mon, Mar 30, 2015 at 11:52 AM, Niklas Nielsen <[email protected] > > > > > wrote: > > > > > > > Big +1; You could also mention the recent bug in the Two fold > > > > authentication patch that you guys discovered with this bug. > > > > > > > > Niklas > > > > > > > > On 30 March 2015 at 10:49, Joris Van Remoortere <[email protected] > > > > > > wrote: > > > > > > > > > I would like to propose we disallow capturing temporaries using a > > > > constant > > > > > reference: > > > > > const T& val = f(); > > > > > > > > > > *The reasons, and examples for this are outlined in the proposal > > here:* > > > > > [Review Board]: https://reviews.apache.org/r/32630/ > > > > > [original markdown version]: > > > > > https://gist.github.com/jmlvanre/8a3de53ae88c2d19b375 > > > > > > > > > > > > > > > Please feel free to comment here on the dev-list, though I also > urge > > > you > > > > to > > > > > comment on the Review Request as putting proposal markdowns on RB > is > > > > > something new we're trying! > > > > > > > > > > Joris > > > > > > > > > > > > > > >
