Re: msvc++ 2005 template question
typedef typename EOT::Fitness Fitness;
This is actually the only time "typename" isn't used, because typedef
requires a typename anyway.
The place typename is needed is undoubtedly in this code:
struct GetFitness { Fitness operator()(const EOT& _eo) const { return
_eo.fitness(); } };
/** returns the fitness of the nth element */
Fitness nth_element_fitness(int which) const
{ // probably not the fastest way to do this, but what the heck
std::vector<Fitness> fitness(size());
std::transform(begin(), end(), fitness.begin(), GetFitness());
typename std::vector<Fitness>::iterator it = fitness.begin() +
which;
std::nth_element(fitness.begin(), it, fitness.end(),
std::greater<Fitness>());
return *it;
}
I think the first line of that is the problem, and that because it's a
different type, where the typedef may not have been seen.
That whole line is a wtf?!?.
The only reason for a struct there would be for polymorphism through a
v-table.... but there's no inheritance and no v-table.
It looks like it should read:
static Fitness GetFitness(const EOT& _eo) { return _eo.fitness(); }
But then, I haven't used std::transform. Try using "typename Fitness" on
that line.