Can't understand generic bound

public inline fun <C, R> C.ifEmpty(defaultValue: () -> R): R where C : CharSequence, C : R =
    if (isEmpty()) defaultValue() else this

This func declared in the kotlin.text.Strings.kt
Coud someone explain how to work generic bound for C : R ?
And if i write something like “where C : CharSequence, C : R” in my own func i got a compile error: "Type parameter cannot have any other bounds if it’s bounded by another type parameter:

Correct bounds will be: where R : CharSequence, C: R