It really depends how we specify it, but we could look at the union derived from varargs as hardened. ## Compiler version v3.3.0-RC2 ## Minimized code ```Scala class Foo class U1 extends Foo class U2 extends Foo class U3 extends Foo class U4 extends Foo type U = U1 | U2 val u : U1 | U2 = ??? type U34 = U3 | U4 val u34 : U3 | U4 = ??? class Boxx[T](x: T*) val b123 = Boxx(u, u34) val b123Test: Boxx[U | U34] = b123 //error ``` ## Output ```scala Found: (b123 : Boxx[Foo]) Required: Boxx[U | U34] ``` ## Expectation No error.