#include <iostream>
#include <string>
using namespace std;
template <class T>
struct Student {
Student(T const &);
void calcDifference(int idx, T const & val1, T const & val2);
}; // Student
template <class T>
void Student<T>::calcDifference(int idx, T const & val1, T const & val2)
{
T difference = val1 - val2;
cout << "Difference values: " << difference << endl;
}
template <>
void Student<string>::calcDifference(
int idx, string const & val1, string const & val2)
{
cout << "Computing string difference (" << val1 << " - " << val2
<< ") is undefined!" << endl;
}
template <class T>
Student<T>::Student(T const & t)
{
cout << "Constructor called for " << t << endl;
}
int main(int argc, const char * argv[])
{
Student<int> iStudent(10);
Student<string> oStudent("hi");
iStudent.calcDifference(1, 12, 10);
oStudent.calcDifference(1, "aaa", "aa");
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBTdHVkZW50IHsKICAgIFN0dWRlbnQoVCBjb25zdCAmKTsKICAgIHZvaWQgY2FsY0RpZmZlcmVuY2UoaW50IGlkeCwgVCBjb25zdCAmIHZhbDEsIFQgY29uc3QgJiB2YWwyKTsKfTsgLy8gU3R1ZGVudAoKdGVtcGxhdGUgPGNsYXNzIFQ+CnZvaWQgU3R1ZGVudDxUPjo6Y2FsY0RpZmZlcmVuY2UoaW50IGlkeCwgVCBjb25zdCAmIHZhbDEsIFQgY29uc3QgJiB2YWwyKQp7CiAgICBUIGRpZmZlcmVuY2UgID0gdmFsMSAtIHZhbDI7CiAgICBjb3V0IDw8ICJEaWZmZXJlbmNlIHZhbHVlczogIiA8PCBkaWZmZXJlbmNlIDw8IGVuZGw7Cn0KCnRlbXBsYXRlIDw+CnZvaWQgU3R1ZGVudDxzdHJpbmc+OjpjYWxjRGlmZmVyZW5jZSgKCWludCBpZHgsIHN0cmluZyBjb25zdCAmIHZhbDEsIHN0cmluZyBjb25zdCAmIHZhbDIpCnsKICAgIGNvdXQgPDwgIkNvbXB1dGluZyBzdHJpbmcgZGlmZmVyZW5jZSAoIiA8PCB2YWwxIDw8ICIgLSAiIDw8IHZhbDIgCiAgICAgICAgIDw8ICIpIGlzIHVuZGVmaW5lZCEiIDw8IGVuZGw7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgpTdHVkZW50PFQ+OjpTdHVkZW50KFQgY29uc3QgJiB0KQp7Cgljb3V0IDw8ICJDb25zdHJ1Y3RvciBjYWxsZWQgZm9yICIgPDwgdCA8PCBlbmRsOwp9CgppbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqIGFyZ3ZbXSkKewogICAgU3R1ZGVudDxpbnQ+ICAgIGlTdHVkZW50KDEwKTsKICAgIFN0dWRlbnQ8c3RyaW5nPiBvU3R1ZGVudCgiaGkiKTsKICAgIAogICAgaVN0dWRlbnQuY2FsY0RpZmZlcmVuY2UoMSwgMTIsIDEwKTsKCW9TdHVkZW50LmNhbGNEaWZmZXJlbmNlKDEsICJhYWEiLCAiYWEiKTsKfQo=