Copy elision
De compiler slaat een kopie of move helemaal over en construeert het object direct op zijn eindbestemming. Sinds C++17 is het belangrijkste geval een eis, geen optimalisatie.
Een tijdelijk object teruggeven — return T{...}; — mag sinds C++17 helemaal geen kopie meer inhouden: het object wordt direct in het geheugen van de aanroeper geïnitialiseerd. De regel is zo geformuleerd dat hij ook geldt voor types die noch gekopieerd noch verplaatst kunnen worden, waardoor een factory zoiets als een std::mutex kan teruggeven. De variant met een benoemde lokale variabele, NRVO, blijft optioneel maar wordt door elke fatsoenlijke compiler toegepast. De gangbare valkuil is return std::move(x); schrijven in de veronderstelling dat het helpt — het doet het tegenovergestelde: de expressie is niet langer een kale naam, NRVO wordt uitgeschakeld en je krijgt een gegarandeerde move waar helemaal niets nodig was.