int variable; void protoOnly(void); void defOnly(void) { } void protoAndDef(void); void protoAndDef(void) { } template void tmplProtoOnly(T t); template void tmplDefOnly(T t) {} template void tmplProtoAndDef(T t); template void tmplProtoAndDef(T t) {} class Cl { int clVar; void clProtoOnly(void); void clDefOnly(void) { } void clProtoAndDef(void); template void clTmplProtoOnly(T t); template void clTmplDefOnly(T t) {} template void clTmplProtoAndDef(T t); }; void Cl::clProtoAndDef(void) { } template void Cl::clTmplProtoAndDef(T t) {} class classProtoOnly; class classProtoAndDef; class classProtoAndDef { }; template class tmplClassProtoOnly; template class tmplClassProtoAndDef; template class tmplClassProtoAndDef { }; template void tmplInstantiatedFunction(T t); template void tmplInstantiatedFunction(T t) {} template class tmplInstantiatedClass; template class tmplInstantiatedClass { T t; }; void f(void) { tmplInstantiatedClass tici; tmplInstantiatedClass ticd; int i; double d; tmplInstantiatedFunction(i); tmplInstantiatedFunction(d); }