#include template struct vec3 { T x; T y; T z; }; template int dot(vec3 v, vec3 u) { return v.x * u.x + v.y * u.y + v.z * u.z; } int main(int argc, char *argv[]) { vec3 v = {1, 2, 3}; vec3 u = {1, 2, 3}; std::cout << dot(v, u) << std::endl; return 0; }