Если шаблон класса с методами, объявленный и определённый в файле .h, инстанциирован с одними и теми же аргументами шаблона в разных единицах трансляции, то я получу одни и те же символы в разных объектных файлах. Линкер ведь должен ругаться, но на практике такое использование шаблонов встречается часто. Почему это работает?