Я не могу скомпилировать следующую программу с gcc 6.1:
#include <iostream>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>
class Foo
{
public:
void apply() const
{
std::for_each(std::cbegin(bars_), std::cend(bars_), [this] (const auto& x) { print(x); });
}
private:
std::vector<std::string> bars_;
void print(const std::string& x) const
{
std::cout << x << ' ';
}
};
int main()
{
Foo foo {};
foo.apply();
return 0;
}
Сообщение об ошибке:
error: cannot call member function 'void Foo::print(const string&) const' without object
std::for_each(std::cbegin(bars_), std::cend(bars_), [this] (const auto& x) { print(x); });
^~~~~
-
Изменение
const auto& x
наconst std::string& x
делает компиляцию программы. -
Изменение
print(x)
наthis->print(x)
делает компиляцию программы. -
Все версии компилируются с помощью Clang (Apple LLVM версии 7.3.0 (clang-703.0.31)).
Является ли это ошибкой компилятора?