T | U gives correct type when T == U