Index: cfe/trunk/include/clang/AST/TemplateBase.h =================================================================== --- cfe/trunk/include/clang/AST/TemplateBase.h +++ cfe/trunk/include/clang/AST/TemplateBase.h @@ -465,7 +465,13 @@ TemplateArgumentLoc(const TemplateArgument &Argument, Expr *E) : Argument(Argument), LocInfo(E) { - assert(Argument.getKind() == TemplateArgument::Expression); + + // Permit any kind of template argument that can be represented with an + // expression + assert(Argument.getKind() == TemplateArgument::NullPtr || + Argument.getKind() == TemplateArgument::Integral || + Argument.getKind() == TemplateArgument::Declaration || + Argument.getKind() == TemplateArgument::Expression); } TemplateArgumentLoc(const TemplateArgument &Argument, Index: cfe/trunk/test/SemaObjCXX/class-templ-error-null-init.mm =================================================================== --- cfe/trunk/test/SemaObjCXX/class-templ-error-null-init.mm +++ cfe/trunk/test/SemaObjCXX/class-templ-error-null-init.mm @@ -0,0 +1,7 @@ +// RUN: %clang_cc1 -fsyntax-only -std=c++17 -verify %s +// expected-no-diagnostics +template +struct e { + e(a) {} +}; +e c(0);