While browsing cppreference I noticed that in several places the words "a temporary" are replaced by "a materialized prvalue" for C++17 (see here for a quick example).
The link on cppreference takes you to this page, which gives this description of what "materialized" means:
A prvalue of any complete type T can be converted to an xvalue of the same type T. This conversion initializes a temporary object of type T from the prvalue by evaluating the prvalue with the temporary object as its result object, and produces an xvalue denoting the temporary object.
Unfortunately this description is a little too close to standardese for me to properly get my head around, and the end result as I read it ("a temporary appears, briefly") doesn't seem any different to how things worked in C++14.
So I'm wondering if anyone can explain, in layman's terms:
- What exactly has changed in C++17 with regard to temporaries?
- What problem(s) does this solve?
- What difference (if any) will this make for C++ users?