That one is not too hard either. `one` simply can't be NRVO'd as there is a runtime path in scope of it that doesn't return it. `two` can be (unless you hide some other return within ...).
You can structre the code differently to get around that. There is a real desire to use NRVO "one" in cases when it is returned as well, if possible.
You can structre the code differently to get around that. There is a real desire to use NRVO "one" in cases when it is returned as well, if possible.