#include struct point { int x; int y; point operator+(const point& other) const { return point{x + other.x, y + other.y}; } void print() { printf("x = %d, y = %d\r\n", x, y); } }; template T add(T a, T b) { return a + b; } template<> point add(point a, point b) { return point{a.x+b.x+1, a.y+b.y+1}; } int main() { point a{1, 2}; point b{2, 1}; auto c = add(a, b); c.print(); return 0; }