veamos, corregidme si me equivoco, pero creo que el problema radica en que en el caso de los templates, el linkador desconoce como debe linkar la operacion en caso de ser int.
Mientras el .h usa T como typo, en algun C debes definir como <int> y decirle que debe hacer.
O sea, si lo haces en el .h se compila bien por que se hace el cambio en el propio compilado, sin embargo, el linkador no sabe de que le hablas, asi que debes definir un modulo con la template bien definida , o sea:
bool ARBOL<int>::Insertar(int x)
{
...
}
bool ARBOL<float>::Insertar(float x)
{
...
}
este problema lo encontre yo al usarlas para el compilador IAR. Para otras cosas uso simples .h por que suelen ser operaciones simples. Pero si tienes que usar un modulo .cpp tienes que indicar todos los tipos posibles en los que el linkador se puede encontrar el tema.
suerte.