Creating a temp object there and copying things into it can be expensive and the object will be either elided or moved when returned from the function as a prvalue. Yet you can avoid these in situations like:
#include <iostream>

struct S {
    int val {};
    S(int i) : val(i) {}
    S operator+(const S& rhs) { return {val+rhs.val}; }
};

int main() {
    S s1(2), s2(3);
    S s3{s1+s2};
    std::cout << s3.val; // 5
}