diff --git a/share/qtcreator/debugger/creatortypes.py b/share/qtcreator/debugger/creatortypes.py
index 207625718e00f29da4c8ccc6c757cc23060babf3..29efb46728dbb629776fdb24e25a2d669525e44a 100644
--- a/share/qtcreator/debugger/creatortypes.py
+++ b/share/qtcreator/debugger/creatortypes.py
@@ -30,6 +30,21 @@
 
 from dumper import *
 
+def stripTypeName(value):
+    type = value.type
+    try:
+        type = type.target()
+    except:
+        pass
+    return str(type.unqualified())
+
+def extractPointerType(d, value):
+    postfix = ""
+    while stripTypeName(value) == "CPlusPlus::PointerType":
+        postfix += "*"
+        value = d.downcast(value["_elementType"]["_type"])
+    return readLiteral(d, value["_name"]) + postfix
+
 def readTemplateName(d, value):
     name = readLiteral(d, value["_identifier"]) + "<"
     args = value["_templateArguments"]
@@ -39,12 +54,7 @@ def readTemplateName(d, value):
     for i in range(size):
         if i > 0:
             name += ", "
-        typeVal = d.downcast(start[i]["_type"])
-        postfix = ""
-        while str(typeVal.type.target().unqualified()) == "CPlusPlus::PointerType":
-            postfix += "*"
-            typeVal = d.downcast(typeVal["_elementType"]["_type"])
-        name += readLiteral(d, typeVal["_name"]) + postfix
+        name += extractPointerType(d, d.downcast(start[i]["_type"]))
     name += ">"
     return name
 
@@ -126,6 +136,10 @@ def qdump__CPlusPlus__NamedType(d, value):
     d.putBetterType(value.type)
     d.putPlainChildren(value)
 
+def qdump__CPlusPlus__PointerType(d, value):
+    d.putValue(d.hexencode(extractPointerType(d, value)), Hex2EncodedLatin1)
+    d.putPlainChildren(value)
+
 def qdump__CPlusPlus__TemplateNameId(d, value):
     dumpLiteral(d, value)
     d.putBetterType(value.type)