class Out class X // Why we want this to be translated to 'Out> f()' instead of 'Out> f()' // For return types default behaviour is skipping all declaration-site wildcards. // The intuition behind this rule is simple: return types are basically used in subtype position // (as an argument for another call), and here everything works well in case of 'out'-variance. // For example we have 'Out>>' as subtype both for 'Out>>' and 'Out>>', // so values of such type is more flexible in contrast to `Out>>` that could be used only // for the second case. fun f(): Out> = throw Exception() // method: OutOfOutInOutPositionKt::f // jvm signature: ()LOut; // generic signature: ()LOut;>;