You may define a template member function outside of its class template definition.
When you call a member function of a class template specialization, the compiler will use the template arguments that you used to generate the class template. The following example demonstrates this:
template<class T> class X { public: T operator+(T); }; template<class T> T X<T>::operator+(T arg1) { return arg1; }; int main() { X<char> a; X<int> b; a +'z'; b + 4; }
The overloaded addition operator has been defined outside of class X. The statement a + 'z' is equivalent to a.operator+('z'). The statement b + 4 is equivalent to b.operator+(4).
Related information