Используется внутреннее приведение типов. Если какая либо функция требует какой либо тип данных, то эти данные будут приведены к этому типу, по правилам приведения. Причём приводится они будут стабильно, даже если пользователь не подозревает об этом.