diff --git a/lib/Sema/SemaTemplateInstantiateExpr.cpp b/lib/Sema/SemaTemplateInstantiateExpr.cpp
index 55be2c2..2a1ee88 100644
--- a/lib/Sema/SemaTemplateInstantiateExpr.cpp
+++ b/lib/Sema/SemaTemplateInstantiateExpr.cpp
@@ -82,7 +82,7 @@
     OwningExprResult VisitCXXThisExpr(CXXThisExpr *E);
     OwningExprResult VisitCXXBoolLiteralExpr(CXXBoolLiteralExpr *E);
     OwningExprResult VisitCXXNullPtrLiteralExpr(CXXNullPtrLiteralExpr *E);
-    // FIXME: CXXTypeIdExpr
+    OwningExprResult VisitCXXTypeidExpr(CXXTypeidExpr *E);
     OwningExprResult VisitCXXThrowExpr(CXXThrowExpr *E);
     // FIXME: CXXDefaultArgExpr
     OwningExprResult VisitCXXConstructExpr(CXXConstructExpr *E);
@@ -813,6 +813,38 @@
 }
 
 Sema::OwningExprResult 
+TemplateExprInstantiator::VisitCXXTypeidExpr(CXXTypeidExpr *E) {
+  if (E->isTypeOperand()) {
+    QualType T = SemaRef.InstantiateType(E->getTypeOperand(),
+                                         TemplateArgs,
+                                     /*FIXME*/E->getSourceRange().getBegin(),
+                                         DeclarationName());
+    if (T.isNull())
+      return SemaRef.ExprError();
+
+    return SemaRef.ActOnCXXTypeid(E->getSourceRange().getBegin(),
+                                  /*FIXME*/E->getSourceRange().getBegin(),
+                                  true, T.getAsOpaquePtr(),
+                                  E->getSourceRange().getEnd());
+  }
+
+  OwningExprResult Operand = Visit(E->getExprOperand());
+  if (Operand.isInvalid())
+    return SemaRef.ExprError();
+
+  OwningExprResult Result 
+    = SemaRef.ActOnCXXTypeid(E->getSourceRange().getBegin(),
+                              /*FIXME*/E->getSourceRange().getBegin(),
+                             false, Operand.get(),
+                             E->getSourceRange().getEnd());
+  if (Result.isInvalid())
+    return SemaRef.ExprError();
+
+  Operand.release(); // FIXME: since ActOnCXXTypeid silently took ownership
+  return move(Result);
+}
+
+Sema::OwningExprResult 
 TemplateExprInstantiator::VisitCXXThrowExpr(CXXThrowExpr *E) {
   OwningExprResult SubExpr(SemaRef, (void *)0);
   if (E->getSubExpr()) {
