namespace Jet87 open class A() { fun foo() : Int } open class B() { fun bar() : Double; } 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 where T : B, B : T, class object B : T, class object T : B, class object T : A test2(t : T) { T.foo() T.bar() t.foo() t.bar() } val test1 = test2<A>(A()) val test2 = test2<B>(B()) val test3 = test2(C()) class Test<T> where class object T : Foo, class object T : A {} val x : Int