Generic Type error

class F<T>(vararg t: T)

class B<T>(vararg f: T) : F(*f)

F throws error requiring at least one typed argument whilst f is already typed

thus requiring to have

class B<T>(vararg f:T) : F<T>(*f)

is this a bug or just the language designs as?

That’s supposed to be that way. You’re not required to use the same type arguments for a class and its subclass, any of these could also make sense depending on what you need:

class B<T>() : F<List<T>>()
class B<T>() : F<Int>()
class B() : F<String>()