Consider: template<typename T> struct S { void g(void (*)(T)); }; template<> void S<int>::g(void(*)(int)) {} When compiled into a PCH with: clang -cc1 t.hpp -emit-pch -o t.hpp.pch I get: clang: PCHWriterDecl.cpp:557: void clang::PCHDeclWriter::VisitParmVarDecl(clang::ParmVarDecl*): Assertion `!D->isStaticDataMember() && "PARM_VAR_DECL can't be static data member"' failed. I'm using clang trunk 108560.
I think the cause here is r108266.
Fixed at r108692.