Given two syntactically different but semantically equal (?) type definitions, one fails with an `invalid subtyping`

error, while the other succeeds. Can someone explain why this is happening?

```
julia> abstract type F{X} end
julia> struct G{X<:Real} <: F{X} end
julia> struct H{X} <: F{X} where X<:Real end
ERROR: invalid subtyping in definition of H
julia> struct H{Y} <: F{Int} where {Y<:Real} end
```