data class Node>( val key: T, val left: Node? = null, val right: Node? = null ) fun > minIterative(root: Node): Node { var curr = root while (curr.left != null) { curr = curr.left // Smart cast to Node is impossible, because 'curr.left' is a complex expression } return curr }