Por que não posso passar um Protocol.Type para um parâmetro T.Type genérico?

Eu estava trabalhando com Swinject e um problema está me incomodando. Fiquei preso por isso quase um dia inteiro. Suspeito que isso se deva ao fato de Swift ser uma linguagem de tipo estatutário, mas não tenho muita certeza.

Resumi meu problema neste playground

protocol Protocol {}

class Class: Protocol {}

let test: Protocol.Type = Class.self

func printType(confromingClassType: Protocol.Type) {
    print(confromingClassType)
}

func printType<Service>(serviceType: Service.Type) {
    print(serviceType)
}

print(Class.self) // "Class"
printType(serviceType: Class.self) // "Class"
print(test) // "Class"
printType(confromingClassType: test) // "Class"

printType(serviceType: test) // "note: expected an argument list of type '(serviceType: Service.Type)'"

Tentei soluções diferentes, como test.self ou tipo (of: test), mas nenhuma delas funciona.

Então eu acho que não posso chamar uma função com um parâmetro genérico fornecido como uma variável?