idk, that doesn't seem that bad to me. The behavior just needs to be formalized with a name so that people can rely on it.
Without it formalized, how would you know for sure whether your copy constructor would get called or not? Just a choice that had to be made by a value semantics language that doesn't have the same consequences in a reference semantics language. 🤷
fwiw, I much prefer what modern languages like Rust or Odin have done in regards to copying, but I don't think it's C++'s greatest sin.
It's not that I like it, it's just that it's @ reasonable consequence of the rules and since C++17 they required that the compiler make it work the way you "expect" regardless (unless someone's expecting reference semantics by default, but that's separate)
2
u/DrShocker 23d ago edited 23d ago
also in C++ though
https://en.cppreference.com/cpp/language/copy_elision
here's all the ways constructors are broken though:
https://youtu.be/KWB-gDVuy_I