summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2016-09-13 16:09:50 +0200
committerAndreas Rumpf <rumpf_a@web.de>2016-09-13 16:33:43 +0200
commit3710e62241fe32fee7e54d804d59bfacf56fcf35 (patch)
treefcbce65446791bed262b6944a6a6926878e64dd0
parent3a5edd2c6c61ce06cd780de2b53d6839fac71d7c (diff)
downloadNim-3710e62241fe32fee7e54d804d59bfacf56fcf35.tar.gz
fixes #4625
-rw-r--r--compiler/ccgtypes.nim2
-rw-r--r--tests/cpp/tempty_generic_obj.nim22
2 files changed, 23 insertions, 1 deletions
diff --git a/compiler/ccgtypes.nim b/compiler/ccgtypes.nim
index 0c06354d8..dee98aab8 100644
--- a/compiler/ccgtypes.nim
+++ b/compiler/ccgtypes.nim
@@ -546,7 +546,7 @@ proc getTypeDescAux(m: BModule, typ: PType, check: var IntSet): Rope =
   of tyRef, tyPtr, tyVar:
     var star = if t.kind == tyVar and tfVarIsPtr notin typ.flags and
                     compileToCpp(m): "&" else: "*"
-    var et = t.lastSon
+    var et = typ.skipTypes(abstractInst).lastSon
     var etB = et.skipTypes(abstractInst)
     if etB.kind in {tyArrayConstr, tyArray, tyOpenArray, tyVarargs}:
       # this is correct! sets have no proper base type, so we treat
diff --git a/tests/cpp/tempty_generic_obj.nim b/tests/cpp/tempty_generic_obj.nim
new file mode 100644
index 000000000..e2957a5cd
--- /dev/null
+++ b/tests/cpp/tempty_generic_obj.nim
@@ -0,0 +1,22 @@
+discard """
+  cmd: "nim cpp $file"
+  output: '''int
+float'''
+"""
+
+import typetraits
+
+# bug #4625
+type
+  Vector {.importcpp: "std::vector<'0 >", header: "vector".} [T] = object
+
+proc initVector[T](): Vector[T] {.importcpp: "'0(@)", header: "vector", constructor.}
+
+proc doSomething[T](v: var Vector[T]) =
+  echo T.name
+
+var v = initVector[int]()
+v.doSomething()
+
+var vf = initVector[float]()
+vf.doSomething() # Nim uses doSomething[int] here in C++