It's weird because as I said I can duplicate my initializer in different extensions like this, and the compiler accepts it:
struct Container<Call: CallType> {
let description: String
let block: Call.Callback
}
extension Container where Call == SyncCall {
// no problem with @escaping:
init(_ description: String, executing block: @escaping Call.Callback) {
self.description = description
self.block = block
}
}
extension Container where Call == AsyncCall {
init(_ description: String, executing block: @escaping Call.Callback) {
self.description = description
self.block = block
}
}