We have found it is best to have the header files at the top but leave the template instantiations at the bottom. The reason is you want to avoid accidently have a bad interaction from defining something before the include of a header  where that something interfers with the code in the header. The best way to avoid such problems is to always include headers before any code in a file.