If the elision copy is not guaranteed (or required) by the standard, then the compiler should not implement it.
This meant that standard permitted compilers supported copying, but did not require them. And in practice, a number of compiler providers have decided not to implement copying. For these suppliers, this is a matter of cost — not implementing a function requires less development effort. For programmers (people who use compilers), this was due to the quality of implementation - a better compiler is more likely to implement the desired optimization, including copying, than a better compiler, but also more expensive to purchase.
Over time, when better compilers become more accessible (with the help of various definitions “free” - not all are equivalent to zero cost), gradually the standard can specify more functions that were previously optional. But it did not start.
If copying is optional, some compilers will rely on the availability of appropriate copy constructors, etc., and some will not. However, the concept of code that meets the requirements of a standard that builds with one compatible compiler, but not another, is naturally undesirable in the standard. Therefore, the standard provides that designers should be available, even if they allow them to be implemented.
Peter source share