Correct me if I am wrong, but IMHO the comparison of the two functions in Mauro's last post is not entirely fair for :: because the parametrized version imposed an additional constraint which has nothing to do with ::
Essentially in the two cases the following types are required: foo: T <: Real && eltype(a) === T && typeof(b) === T bar: eltype(a) <: Real && typeof(b) <: Real The latter is equivalent to T <: Real && S <: Real && eltype(a) === T && typeof(b) === S, which requires two /independent/ type parameters, while in foo the types are linked by construction. From that perspective I would say that the behavior of :: is consistent. Hope that makes sense, Alex.