diff --git a/src/libs/cplusplus/DeprecatedGenTemplateInstance.cpp b/src/libs/cplusplus/DeprecatedGenTemplateInstance.cpp
index 762e197e331fb8a0162f8fbd2a151e5bdf89979b..b82e16cf6e5dbd7af7934444d3fdb25af1628bbb 100644
--- a/src/libs/cplusplus/DeprecatedGenTemplateInstance.cpp
+++ b/src/libs/cplusplus/DeprecatedGenTemplateInstance.cpp
@@ -399,18 +399,16 @@ FullySpecifiedType DeprecatedGenTemplateInstance::gen(Symbol *symbol)
 FullySpecifiedType DeprecatedGenTemplateInstance::instantiate(const Name *className, Symbol *candidate,
                                                               QSharedPointer<Control> control)
 {
-#warning robe: enable template instantiation
-#if 0
     if (className) {
         if (const TemplateNameId *templId = className->asTemplateNameId()) {
-            if (Class *klass = candidate->scope()->asClass()) {
+            if (Template *templ = candidate->enclosingTemplate()) {
                 DeprecatedGenTemplateInstance::Substitution subst;
 
                 for (unsigned i = 0; i < templId->templateArgumentCount(); ++i) {
                     FullySpecifiedType templArgTy = templId->templateArgumentAt(i);
 
-                    if (i < klass->templateParameterCount()) {
-                        const Name *templArgName = klass->templateParameterAt(i)->name();
+                    if (i < templ->templateParameterCount()) {
+                        const Name *templArgName = templ->templateParameterAt(i)->name();
 
                         if (templArgName && templArgName->identifier()) {
                             const Identifier *templArgId = templArgName->identifier();
@@ -424,6 +422,5 @@ FullySpecifiedType DeprecatedGenTemplateInstance::instantiate(const Name *classN
             }
         }
     }
-#endif
     return candidate->type();
 }
diff --git a/src/shared/cplusplus/Symbol.cpp b/src/shared/cplusplus/Symbol.cpp
index cfb61bfae44b129228cf85741cd75b7ea465c35a..f41c02d3a9e315d261ecc6a3fcd9bebb133ca7b1 100644
--- a/src/shared/cplusplus/Symbol.cpp
+++ b/src/shared/cplusplus/Symbol.cpp
@@ -251,6 +251,15 @@ Namespace *Symbol::enclosingNamespace() const
     return 0;
 }
 
+Template *Symbol::enclosingTemplate() const
+{
+    for (Scope *s = _scope; s; s = s->scope()) {
+        if (Template *templ = s->asTemplate())
+            return templ;
+    }
+    return 0;
+}
+
 Class *Symbol::enclosingClass() const
 {
     for (Scope *s = _scope; s; s = s->scope()) {
diff --git a/src/shared/cplusplus/Symbol.h b/src/shared/cplusplus/Symbol.h
index 7b80e5093cf5929deda9414ef2d12e92364ff49d..3ca9f13f8fd684aec2ca20b73a4b8b4a6565997d 100644
--- a/src/shared/cplusplus/Symbol.h
+++ b/src/shared/cplusplus/Symbol.h
@@ -292,6 +292,9 @@ public:
     /// Returns the eclosing namespace scope.
     Namespace *enclosingNamespace() const;
 
+    /// Returns the eclosing template scope.
+    Template *enclosingTemplate() const;
+
     /// Returns the enclosing class scope.
     Class *enclosingClass() const;