&gt; Type inference in the presence of OOP-style subtyping was largely considered to be impossible in 2005<p>Type inference in a OO language is <i>still</i> considered, if not impossible, at least very impractical. Swift, Scala and Rust avoid most algorithmic complexity and ambiguity by mostly supporting only type <i>propagation</i> instead of type <i>inference</i>, and thus require annotations on function parameters.