You would still have to update everything if you rename a field in a struct, what do you mean you never have to worry?
If you're duck typing, you find this out in the best case when your unit tests exercise it, and in the worst case by a support call when that 1/1000 error handling path finally gets exercised in production.
Slowly but surely, new languages are starting to develop with static duck typing. Implicit interfaces if you will.
What do you mean by this? Macros? C++ templates?