> One of the big problems of value types in C++ is that you have to be a language lawyer to not accidentally make wasteful copies of everything...
Not always. The C++ standard has allowed copy elision for some time [1]. Guaranteed copy elision for certain forms of copy has been proposed for C++17 [2].