summary refs log tree commit diff stats
path: root/tests/concepts/t3330.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/concepts/t3330.nim')
-rw-r--r--tests/concepts/t3330.nim70
1 files changed, 70 insertions, 0 deletions
diff --git a/tests/concepts/t3330.nim b/tests/concepts/t3330.nim
new file mode 100644
index 000000000..901f8d2f4
--- /dev/null
+++ b/tests/concepts/t3330.nim
@@ -0,0 +1,70 @@
+discard """
+matrix: "--mm:refc"
+errormsg: "type mismatch: got <Bar[system.int]>"
+nimout: '''
+t3330.nim(70, 4) Error: type mismatch: got <Bar[system.int]>
+but expected one of:
+proc test(foo: Foo[int])
+  first type mismatch at position: 1
+  required type for foo: Foo[int]
+  but expression 'bar' is of type: Bar[system.int]
+t3330.nim(55, 8) Hint: Non-matching candidates for add(k, string, T)
+proc add(x: var string; y: char)
+  first type mismatch at position: 1
+  required type for x: var string
+  but expression 'k' is of type: Alias
+proc add(x: var string; y: cstring)
+  first type mismatch at position: 1
+  required type for x: var string
+  but expression 'k' is of type: Alias
+proc add(x: var string; y: string)
+  first type mismatch at position: 1
+  required type for x: var string
+  but expression 'k' is of type: Alias
+proc add[T](x: var seq[T]; y: openArray[T])
+  first type mismatch at position: 1
+  required type for x: var seq[T]
+  but expression 'k' is of type: Alias
+proc add[T](x: var seq[T]; y: sink T)
+  first type mismatch at position: 1
+  required type for x: var seq[T]
+  but expression 'k' is of type: Alias
+
+t3330.nim(55, 8) template/generic instantiation of `add` from here
+t3330.nim(62, 6) Foo: 'bar.value' cannot be assigned to
+t3330.nim(55, 8) template/generic instantiation of `add` from here
+t3330.nim(63, 6) Foo: 'bar.x' cannot be assigned to
+
+expression: test(bar)'''
+"""
+
+
+
+
+
+
+
+
+
+
+
+
+## line 60
+type
+  Foo[T] = concept k
+    add(k, string, T)
+
+  Bar[T] = object
+    value: T
+    x: string
+
+proc add[T](bar: Bar[T], x: string, val: T) =
+  bar.value = val
+  bar.x = x
+
+proc test(foo: Foo[int]) =
+  foo.add("test", 42)
+  echo(foo.x)
+
+var bar = Bar[int]()
+bar.test()