При обновлении до более нового компилятора и устранении ошибок компилятора я понял, что boost::fusion::for_each
требует, чтобы передаваемый объект функции имел оператор const
.
Пример из Boost :
struct increment
{
template<typename T>
void operator()(T& t) const
{
++t;
}
};
...
vector<int,int> vec(1,2);
for_each(vec, increment());
Это, конечно, не изменилось.Я не понял, что это отличается от std::for_each
, который не требует, чтобы оператор был const
.
struct increment
{
template<typename T>
void operator()(T& t) // no const here!!!
{
++t;
}
};
std::vector<int> numbers;
std::for_each(numbers.begin(), numbers.end(), increment());
Есть ли очевидная причина для требования const
?Я, очевидно, не могу изменить это, но я хотел бы понять, почему эти два отличаются.
Спасибо за любые идеи и объяснения!