Indeed all the examples show such tiny classes, without the disclaimer about implementation efficiency. To make things worse, when the compiler is generating all these temporary objects on the stack, it doesn't register colour the stack, so the function's stack frame gets big. This often specifies that structures are to be passed by reference. For small structures this is not appropriate. It is better to pass those by value, because thy occupy only one or two registers.
Investigation indicates that beyond that size it becomes less practical.
What this means in reality is that whenever you take the address of a function, you have to take the address of a C ABI entry point. These two things are oxymoronical. If I declare a function taking a type ' A ', but pass it a ' Z ', I want to be told about it. I object to the compiler trying to second guess me and look for a way to convert a ' Z ' to an ' A '. This of course doesn't apply to casting.