Run "etags" of emacs 23.1 on the attached "Foo.H" file . The resulting TAGS file indicates "Foo.H" is empty. Seems to me it should show two definitions for the 2 specializations of `Worker`. ----------- TAGS -------------- ^L Foo.H,0 ---------------------------------- ----------- Foo.H ---------------- template< class _A, class _B = Select<_A>::Result > class Worker; template class Worker<_A,int> { }; template class Worker<_A,double> { }; ---------------------------------------