Contravariance is a phenomenon that occurs as an interaction between subtyping and higher-order functions. It affects all object-oriented programming languages including C++ and is usually circumvented by overloading. The author provides examples in C++ where overloading does not have the desired effect, and discusses what a better - more expressive and typesafe - language might look like.