Не должно быть никаких существенных последствий для производительности, хотя код будет очень незначительно наказываться. Чтобы лучше понять последствия, давайте попробуем разбить код на что-то похожее на сгенерированный код компилятора:
От:
return TResourceLoader{}.loadResource(std::forward<Args>(args)...));
Кому:
char Storage[1]; // Any object in C++ is at least 1 byte, including classes with no members
Storage(&Storage); // Pseudo-code illustrating calling constructor
loadResource(&Storage, <args>); // considering loadResource can't be inlined
Storage.~Storage();
В приведенном выше коде компилятор увидит, что как конструктор, так и деструктор являются значениями по умолчанию, и, поскольку класс не имеет члена, действительно тривиальны - так что их можно было бы безопасно опустить.
В результате вы должны выделить 1 байт в автоматическом хранилище, что в современных архитектурах обычно означает уменьшение регистра указателя стека с последующим его увеличением.
Это невероятно быстрая операция, но она все еще не мгновенная.