// named and unnamed types are passed to parameters with identical type, different types
// (named vs underlying) may be inferred depending on the order of the arguments.
// By ensuring that named types are seen first, order dependence is avoided and unification
- // succeeds where it can.
- //
- // This code is disabled for now pending decision whether we want to address cases like
- // these and make the spec on type inference more complicated (see issue #43056).
- const enableArgSorting = false
+ // succeeds where it can (issue #43056).
+ const enableArgSorting = true
if m := len(args); m >= 2 && enableArgSorting {
// Determine indices of arguments with named and unnamed types.
var named, unnamed []int
type myString string
var s1 string
g3(nil, "1", myString("2"), "3")
- g3(&s1, "1", myString /* ERROR does not match */ ("2"), "3")
+ g3(& /* ERROR does not match */ s1, "1", myString("2"), "3")
_ = s1
type myStruct struct{x int}
var j func(F)
f(i, j)
- // f(j, i) // disabled for now
+ f(j, i)
}
// example from issue
var j interface{ Equal(I) bool }
g(i, j)
- // g(j, i) // disabled for now
+ g(j, i)
}
// named and unnamed types are passed to parameters with identical type, different types
// (named vs underlying) may be inferred depending on the order of the arguments.
// By ensuring that named types are seen first, order dependence is avoided and unification
- // succeeds where it can.
- //
- // This code is disabled for now pending decision whether we want to address cases like
- // these and make the spec on type inference more complicated (see issue #43056).
- const enableArgSorting = false
+ // succeeds where it can (issue #43056).
+ const enableArgSorting = true
if m := len(args); m >= 2 && enableArgSorting {
// Determine indices of arguments with named and unnamed types.
var named, unnamed []int
type myString string
var s1 string
g3(nil, "1", myString("2"), "3")
- g3(&s1, "1", myString /* ERROR does not match */ ("2"), "3")
+ g3(& /* ERROR does not match */ s1, "1", myString("2"), "3")
type myStruct struct{x int}
var s2 myStruct
var j func(F)
f(i, j)
- // f(j, i) // disabled for now
+ f(j, i)
}
// example from issue
var j interface{ Equal(I) bool }
g(i, j)
- // g(j, i) // disabled for now
+ g(j, i)
}