In the 2.12 spec, this is called a Typed Pattern (8.1.2) and explained in detail in (8.2).
A parameterized type pattern T[a1,…,an], where the ai are type variable patterns or wildcards _. This type pattern matches all values which match T for some arbitrary instantiation of the type variables and wildcards. The bounds or alias type of these type variable are determined as described here.
which links to (8.3 Type Parameter Inference in Patterns) for details.
I’ll admit, i wasn’t fully aware of the complexity of this functionality. I’d have thought type erasure would wreak havoc, but apparently it’s not as simple as i’d have thought.