> (3) seems to be an strict equivalent to <3>()

No, when the number is a template parameter it is a compile-time constant. I won't claim that in this particular situation it yields faster/more optimized code, but I do believe that generally it makes sense to give the compiler as much information as possible.

As for the compilation error, you need to add `template` keyword, i.e. `plane_a.template head<3> ().dot (plane_b.template head<3> ());`