Consider the following example:
class MyClass
{
const int _id;
public:
MyClass(auto id) : _id(id) {}
};
int main()
{
MyClass(3);
return 0;
}
It works fine.
Also
class MyClass
{
const int _id;
public:
MyClass(auto id);
};
MyClass::MyClass(auto id) : _id(id)
{
}
int main()
{
MyClass(3);
return 0;
}
Works fine.
However,
#ifndef MYCLASS_H
#define MYCLASS_H
class MyClass
{
const int _id;
public:
MyClass(auto id);
};
#endif
and
#include "MyClass.h"
MyClass::MyClass(auto id) : _id(id)
{
}
and
#include "MyClass.h"
int main()
{
MyClass(3);
return 0;
}
Gives this linker error:
/tmp/ccJQ1HNz.o: In function `main':
deduce.cpp:(.text+0x15): undefined reference to `MyClass::MyClass<int>(int)'
collect2: error: ld returned 1 exit status
So it has to do something with templates .. But where do they come in?