// RUN: %target-typecheck-verify-swift class A { } class B : A { } class C : B { } class D : B { } class E : D { } class F : E<[T]> { } var a : A var b : B var c : C var d : D var ef : E var fi : F func f0(_ b : B) {} func ternary(_ cond: Bool, _ ifTrue: @autoclosure () -> T, _ ifFalse: @autoclosure () -> T) -> T {} f0(c) f0(a) // expected-error{{cannot convert value of type 'A' to expected argument type 'B'}} f0(ef) f0(fi) // FIXME: Test subtyping of class metatypes. _ = ternary(true, ef, c) class X { init() {} init(x:Int, y:UnicodeScalar) {} } var x0 = X() var x1 = X(x: 1, y: "2")