protocol ServiceTransport<Service> { associatedtype Service func register( methodSelector: @escaping @Sendable (Service.Type) -> (Service) -> () async throws -> Void ) } protocol P { func foo() } func f(transport: some ServiceTransport<some P & SendableMetatype>) { transport.register { $0.foo } } #if swift(>=6.2) typealias SendableMetatype = Swift.SendableMetatype #else typealias SendableMetatype = Any #endif