به نظر من دلیلش بخاطر Virtual Function Table هست . (vtable)
چون template یه حالت برای درست کردن الگو هست تا با اون الگو بشه توابع و کلاسهای معینی درست کرد .
vtable یه جدول اشاره گر به توایعی مجازی اون کلاس هست و توی هر کلاسی هم که حداقل یک تابع virtual داره vtable وجود داره .
و Compiler برای override کردن توابع virtual به یک شکل بودن تابع (مثلا نوع پارامترهاشون و تعدادشون و ... ) با تابعی که قراره روی اون override بشه اهمیت میده .
و template با تغییر نوع پارامترها و نوع برگشتی دقیقا این یک شکل بودن رو از اینجور توابع میگیره .