No wronger than anyone else is. Parameter packs are still quite broken, but there are generally workarounds.
For example, sometimes, by hiding metatypes:
extension QueryStateAccessing {
func values<each Response: QueryResponseProtocol>() throws -> (repeat each Response) {
try values(for: repeat (each Response).self)
}
}
let (pricingResponse, aspectsResponse): (PricingResponse, AspectsResponse)
= try queryState.values()
_ = pricingResponse.price
_ = aspectsResponse.aspects
_ = try queryState.values() as (PricingResponse, AspectsResponse)
let _: ShippingResponse = try queryState.values()
let results: (PricingResponse, AspectsResponse) = try queryState.values()
_ = results.0
Note, however, that single values are not really handled properly:
// Error: Cannot convert value of type '()' to type 'ShippingResponse' in coercion
_ = try queryState.values() as ShippingResponse