diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim index b175549dcb..ddf696bec0 100644 --- a/compiler/sigmatch.nim +++ b/compiler/sigmatch.nim @@ -1424,7 +1424,8 @@ proc typeRel(c: var TCandidate, f, aOrig: PType, return isNone if fRange.rangeHasUnresolvedStatic: - if aRange.kind in {tyGenericParam} and aRange.reduceToBase() == aRange: + if (aRange.kind in {tyGenericParam} and aRange.reduceToBase() == aRange) or + (aRange.kind == tyRange and aRange.rangeHasUnresolvedStatic): return return inferStaticsInRange(c, fRange, a) elif c.c.matchedConcept != nil and aRange.rangeHasUnresolvedStatic: diff --git a/tests/overload/tgenericrangedisamb.nim b/tests/overload/tgenericrangedisamb.nim new file mode 100644 index 0000000000..19d7c97e6f --- /dev/null +++ b/tests/overload/tgenericrangedisamb.nim @@ -0,0 +1,21 @@ +# issue #24708 + +type Matrix[m, n: static int] = array[m * n, float] + +func `[]`(A: Matrix, i, j: int): float = + A[A.n * i + j] + +func `[]`(A: var Matrix, i, j: int): var float = + A[A.n * i + j] + +func `*`[m, n, p: static int](A: Matrix[m, n], B: Matrix[n, p]): Matrix[m, p] = + for i in 0 ..< m: + for k in 0 ..< p: + for j in 0 ..< n: + result[i, k] += A[i, j] * B[j, k] + +func square[n: static int](A: Matrix[n, n]): Matrix[n, n] = + A * A + +let A: Matrix[2, 2] = [-1, 1, 0, -1] +doAssert square(A) == [1.0, -2.0, 0.0, 1.0]