В то время как это не обращается к шаблонам STL, документация для GCC имеет короткий раздел по уменьшению чрезмерного увеличения размера кода при использовании шаблонных шаблонов.
ссылка http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Template-Instantiation.html#Template-Instantiation
Я не знаю о NHibernate, но в целом проекция - это преобразование набора в другой набор. В SQL это выражается как SELECT.