summary refs log tree commit diff stats
path: root/tests/compile
diff options
context:
space:
mode:
authorZahary Karadjov <zahary@gmail.com>2013-12-27 18:34:28 +0200
committerZahary Karadjov <zahary@gmail.com>2013-12-27 18:34:28 +0200
commita27eb51535f9ff233b67e5bac80cc51b81c343c7 (patch)
tree02d29f44788e7ddc00ee9bba3381eb86d349ba6a /tests/compile
parent4eea2f17d36b2cf239f0a987b5d9715a81b2b70f (diff)
downloadNim-a27eb51535f9ff233b67e5bac80cc51b81c343c7.tar.gz
towards support for composite type classes such as seq[Number] and SquareMatrix[T]
Diffstat (limited to 'tests/compile')
-rw-r--r--tests/compile/tcompositetypeclasses.nim30
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/compile/tcompositetypeclasses.nim b/tests/compile/tcompositetypeclasses.nim
new file mode 100644
index 000000000..ea966f1a9
--- /dev/null
+++ b/tests/compile/tcompositetypeclasses.nim
@@ -0,0 +1,30 @@
+template accept(e) =
+  static: assert(compiles(e))
+
+template reject(e) =
+  static: assert(not compiles(e))
+
+type
+  TFoo[T, U] = tuple
+    x: T
+    y: U
+
+  TBar[K] = TFoo[K, K]
+
+  TUserClass = int|string
+
+  # TBaz = TBar[TUserClass]
+
+var
+  vfoo: TFoo[int, string]
+  vbar: TFoo[string, string]
+
+proc foo(x: TFoo) = echo "foo"
+proc bar(x: TBar) = echo "bar"
+# proc baz(x: TBaz) = echo "baz"
+
+accept(foo(vfoo))
+accept(bar(vbar))
+# baz vbar
+reject(bar(vfoo))
+