Compiler errors destructuring Parameter Pack return tuple

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
1 Like