1) PearsonDistance? makes use of AveragerPair? so just making templates in PearsonDistance? does not work. In this case the templates stuff would have to be in AveragerPair? also. Right?

2) I have been thinking about traits a little bit and I do not see an easy way to do this. Even if we can get it to work it seems as if we need individual traits specializations for every vector-like object we are intending to get to work with Distance (maybe more elegant to implement such a creature than adding a member function to Distance but ...). If this really can be solved with traits maybe we should start sketching on a way to do it here, as an exercise to really learn traits. But we should also think about if some alternative template strategy is optimal for this problem.

So what should template <class vector_T> struct vector_traits {}; look like default and how do we specialize it for DataLookupWeighted? ?