I was about to multiply two Points (as they are used synonymous to vectors), but was amazed, that operator*(Point<Type>) returns a Point and not a scalar value, as I mathematically expected. I think multiplying vectors/points elementwise is not so commonly used, is it?

Would be nice to have at least the alternative by a method though, my suggestion for juce_Point.h:

/** Compute the dot product of two points */ template <typename OtherType> ValueType dotProduct (Point<OtherType> other) const noexcept { return (ValueType) ((x * other.x) + (y * other.y)); }

Quite simple...