For class templates, member functions are instantiated only when they are used.
This, of course, saves time and space.
using namespace std;
template <typename T>
class myTemplate
{
private:
typename T m_t;
public:
myTemplate(T t):m_t(t){};
T AddOne(){
return m_t + 1;
}
void Output(){cout<<m_t<<endl;}
};
int main()
{
myTemplate<int> i(10);
i.AddOne();
i.Output();
myTemplate<string> s("temp");
//s.AddOne(); // Compile error becasue std::string has no operator + with int type
s.Output(); // however, this line has no issue
return 10;
}