Thanks for the replies, now it is clearer. However, the minimum dimension I have in my datasets is 100 and I want to run NN with dimension 10000.

So, how I am going to initialize a point?

template <int CompileTimeDimension>
void fill(point& tmp)
{
    for(int j = CompileTimeDimension - 1 ; j >= 0 ; --j) {
         bg::set<CompileTimeDimension-->(tmp, 5);
     }
}

Even I can see that the above code won't even compile. Writting manually bg::set<0>(tmp, 5), ..., bg::set<10000>(tmp, 5) does not really sound a good idea. So what should I do?

Maybe boost nearest's neighbors are meant to be used in higher dimensions?