summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2016-04-18 10:53:49 +0200
committerAndreas Rumpf <rumpf_a@web.de>2016-04-18 10:53:49 +0200
commitd7e8b89eb8f159e0220c48cd06233b7a6a060a72 (patch)
tree3b05979e92f003b3acb94052d9a3839cf255cfcc
parent7f7fc35a0edbe94056a5ad8c442c577f0a1ce7be (diff)
parent01ca3ba26d28c5f645b0fc30fca1f386970d120d (diff)
downloadNim-d7e8b89eb8f159e0220c48cd06233b7a6a060a72.tar.gz
Merge pull request #4094 from mjendrusch/cppTemplates
Fixes #4093
-rw-r--r--compiler/ccgtypes.nim2
-rw-r--r--lib/nimbase.h2
-rw-r--r--tests/cpp/ttemplatetype.nim9
3 files changed, 12 insertions, 1 deletions
diff --git a/compiler/ccgtypes.nim b/compiler/ccgtypes.nim
index 39f16ff0d..ab40fff73 100644
--- a/compiler/ccgtypes.nim
+++ b/compiler/ccgtypes.nim
@@ -654,7 +654,7 @@ proc getTypeDescAux(m: BModule, typ: PType, check: var IntSet): Rope =
       else:
         result = cppName & "<"
         for i in 1 .. typ.len-2:
-          if i > 1: result.add(", ")
+          if i > 1: result.add(" COMMA ")
           result.add(getTypeDescAux(m, typ.sons[i], check))
         result.add("> ")
       # always call for sideeffects:
diff --git a/lib/nimbase.h b/lib/nimbase.h
index 5a4f403b6..f531f3c49 100644
--- a/lib/nimbase.h
+++ b/lib/nimbase.h
@@ -222,6 +222,8 @@ __clang__
 
 /* ----------------------------------------------------------------------- */
 
+#define COMMA ,
+
 #include <limits.h>
 #include <stddef.h>
 
diff --git a/tests/cpp/ttemplatetype.nim b/tests/cpp/ttemplatetype.nim
new file mode 100644
index 000000000..7f56a225d
--- /dev/null
+++ b/tests/cpp/ttemplatetype.nim
@@ -0,0 +1,9 @@
+type
+  Map {.importcpp: "std::map", header: "<map>".} [T,U] = object
+
+proc cInitMap(T: typedesc, U: typedesc): Map[T,U] {.importcpp: "std::map<'*1,'*2>()", nodecl.}
+
+proc initMap[T, U](): Map[T, U] =
+  result = cInitMap(T, U)
+
+var x: Map[cstring, cint] = initMap[cstring, cint]()