I was wondering that when I create an instance of a class template with specifying the template type parameter.
1) why the non-called function do not get instatiated ? .
2) dont they get compiled until I try to use it ?
3) what is the logic behind this behavior ?
Example
template <class T>
class cat{
public:
T a;
void show(){
cout << a[0];
}
void hello(){
cout << "hello() get called \n";
}
};
int main(){
cat<int> ob1; // I know that show() did not get instatiated, otherwise I will get an error since a is an int
ob1.hello();
}
If they instantiated the entire class, then you might get invalid code.
You don’t always want that.
Why? Because in C++, it’s difficult (and in some cases, outright impossible, as far as I know) to say, “only compile this code if X, Y, and Z are true”.
For example, how would you say, “only my copy constructor if the embedded object can be copied”? As far as I know, you can’t.
So they just made them not compile unless you actually call them.