Index: cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp =================================================================== --- cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -2110,6 +2110,8 @@ Param->setInvalidDecl(); if (D->hasDefaultArgument() && !D->defaultArgumentWasInherited()) { + EnterExpressionEvaluationContext ConstantEvaluated(SemaRef, + Sema::ConstantEvaluated); ExprResult Value = SemaRef.SubstExpr(D->getDefaultArgument(), TemplateArgs); if (!Value.isInvalid()) Param->setDefaultArgument(Value.get()); Index: cfe/trunk/test/SemaTemplate/default-arguments-cxx0x.cpp =================================================================== --- cfe/trunk/test/SemaTemplate/default-arguments-cxx0x.cpp +++ cfe/trunk/test/SemaTemplate/default-arguments-cxx0x.cpp @@ -75,3 +75,13 @@ g(); } } + +// rdar://problem/24480205 +namespace PR13986 { + constexpr unsigned Dynamic = 0; + template class A { template void m_fn1(); }; + class Test { + ~Test() {} + A<1> m_target; + }; +}