This is a simple question about separating an interface from an implementation:
template<typename T> Object<T>::func_impl(){
}
template<typename T> Object<T>::func(){
func_impl<T>();
}
template<> Object<int> Object<int>::func(){
func_impl<int>();
}
To clarify: what you are doing is not overloading . It was called template specialization . It is not possible to create a template template for this type if you have provided specialization for this type.
source
share