package Jet87 open class A() { fun foo() : Int = 1 } trait B { fun bar() : Double = 1.0; } class C() : A(), B class D() { class object : A(), B {} } class Test1() where T : B, B : T, // error class object T : A, class object T : B, class object B : T { fun test(t : T) { T.foo() T.bar() t.foo() t.bar() } } fun test() { Test1<B>() Test1<A>() Test1() } class Foo() {} class BarFoo> class Buzz where T : Bar<Int>, T : nioho class XFoo> class Y<T : Foo> where T : Bar fun test2(t : T) where T : B, B : T, class object B : T, class object T : B, class object T : A { T.foo() T.bar() t.foo() t.bar() } val t1 = test2<A>(A()) val t2 = test2<B>(C()) val t3 = test2(C()) class Test where class object T : Foo, class object T : A {} val x : Int = 0