module 0x42::M { struct NoAbilities { a: bool } struct HasDrop has drop { a: T2 } struct HasCopy has copy { a: T2 } struct HasStore has store { a: T2 } struct HasKey has key { a: T2 } struct HasAbilities has drop, copy, store, key { a: T2 } struct S1 { a: T } struct S2 { a: S1>, } struct S3 { a: T1, b: T2, c: T3, d: T4 } struct S4 { a: S3< HasDrop, HasCopy, HasStore, HasKey > } fun f1() { } fun f2() { f1>(); } fun f3() { } fun f4() { f3< HasDrop, HasCopy, HasStore, HasKey >(); } }