The dot product seems to be returning incorrect results for the case below (using Vec2s), and I'm not sure if it's a bug or I'm using it incorrectly:
Vec2s a(-495, 584), b(101, 8);
auto c = a.dot(b);
cout << c << "\n";
cout << a[0]*b[0] + a[1]*b[1];
In the output below, the first result is clearly incorrect:
20213
-45323