def bar[T: Manifest](a: Array[T]) = Array.ofDim[T](3)
class Foo
bar(Array(new Foo)) //Array[Foo] = Array(null, null, null)
Manifests seem to exist implicitly for arbitrary types, as shown above.
Since we have a context bound, this implies that there will be some types for which there is no implicit Manifest - what are they?
I'm not sure that your deduction is correct. I haven't seen types for which there is no manifest, but I have seen situations where the type inferencer doesn't seem able to provide one.
Specifically in nesting inference situations like this:
It seems that unless the manifest is 'passed around' it isn't available at the lower level - so that we can say
or
However quite why this is the behaviour I don't know.
A Manifest has to be "carried" from the point where the concrete type last appears in the source code, all the way through type parameters to the place where it is required.
But everything has a manifest.