What I mean is this:
scala> class Bounded[T <: String](val t: T)
defined class Bounded
scala> val b: Bounded[_] = new Bounded(\"some string\")
b: B
First, I have edited the question title. You are not using dependent types, which Scala doesn't have anyway, but existential types. Second, you are not inferring anything, you are explicitly declaring the type.
Now, if you did write Bounded[Any]
, Scala wouldn't let you. However, one of the uses of existential types is to deal with situations where the type parameter is completely unknown -- such as Java raw types, where.
So my guess is that making an exception in a situation that seems obvious enough will break some other situation where existential type is the only way to deal with something.