Call to functor :
double average=std::for_each(values.begin(),values.end(),CalculateAverage());
Above code will call functor CalculateAverage,
but from inside of "void operator () (double elem)", where "operator double() const" is getting called.
functor is defined like this:
class CalculateAverage
{
private:
std::size_t num;
double sum;
public:
CalculateAverage() : num (0) , sum (0)
{
}
void operator () (double elem)
{
num++;
sum += elem;
}
operator double() const
{
return sum / num;
}
};
How and where double() const is getting called ?
std::for_each
returns the function object.
Normally it is done like:
CalculateAverage average=std::for_each(values.begin(),values.end(),CalculateAverage());
But in your case average
gets converted to double
because of the overload present in your class.
You have provided a conversion operator due to which it is called.