mirror of
https://github.com/nim-lang/Nim.git
synced 2026-02-19 09:28:33 +00:00
fix #1820
This commit is contained in:
@@ -989,7 +989,7 @@ proc typeRel(c: var TCandidate, f, aOrig: PType, doBind = true): TTypeRelation =
|
||||
if aOrig.kind == tyStatic:
|
||||
result = typeRel(c, f.lastSon, a)
|
||||
if result != isNone and f.n != nil:
|
||||
if not exprStructuralEquivalent(f.n, a.n):
|
||||
if not exprStructuralEquivalent(f.n, aOrig.n):
|
||||
result = isNone
|
||||
if result != isNone: put(c.bindings, f, aOrig)
|
||||
else:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
discard """
|
||||
file: "tstaticparams.nim"
|
||||
output: "abracadabra\ntest\n3\n15\n4\n2"
|
||||
output: "abracadabra\ntest\n3\n15\n4\n2\nfloat\n3\nfloat\nyin\nyang"
|
||||
"""
|
||||
|
||||
type
|
||||
@@ -83,3 +83,39 @@ reject matrix_2(tmat, ar1)
|
||||
reject matrix_3(tmat, ar2)
|
||||
reject matrix_4(tmat, ar1)
|
||||
|
||||
# bug 1820
|
||||
|
||||
type
|
||||
T1820_1[T; Y: static[int]] = object
|
||||
bar: T
|
||||
|
||||
proc intOrFloat*[Y](f: T1820_1[int, Y]) = echo "int"
|
||||
proc intOrFloat*[Y](f: T1820_1[float, Y]) = echo "float"
|
||||
proc threeOrFour*[T](f: T1820_1[T, 3]) = echo "3"
|
||||
proc threeOrFour*[T](f: T1820_1[T, 4]) = echo "4"
|
||||
|
||||
var foo_1: T1820_1[float, 3]
|
||||
|
||||
foo_1.intOrFloat
|
||||
foo_1.threeOrFour
|
||||
|
||||
type
|
||||
YinAndYang = enum
|
||||
Yin,
|
||||
Yang
|
||||
|
||||
T1820_2[T; Y: static[YinAndYang]] = object
|
||||
bar: T
|
||||
|
||||
proc intOrFloat*[Y](f: T1820_2[int, Y]) = echo "int"
|
||||
proc intOrFloat*[Y](f: T1820_2[float, Y]) = echo "float"
|
||||
proc yinOrYang*[T](f: T1820_2[T, YinAndYang.Yin]) = echo "yin"
|
||||
proc yinOrYang*[T](f: T1820_2[T, Yang]) = echo "yang"
|
||||
|
||||
var foo_2: T1820_2[float, Yin]
|
||||
var foo_3: T1820_2[float, YinAndYang.Yang]
|
||||
|
||||
foo_2.intOrFloat
|
||||
foo_2.yinOrYang
|
||||
foo_3.yinOrYang
|
||||
|
||||
|
||||
Reference in New Issue
Block a user