The x64 ABI always allocate a register for the return value, used or not and for non trivial type, copy elision if direct initialization will more likely occurs if simple rules are followed and at worst move semantic ( not more relevant than copy if dealing with pod ).