Parameterized subtying syntax strangeness

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