Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagecpp
#include <iostream>

using namespace std;

auto  isEqual = [](auto &pp)->bool {return pp.getX() == pp.getY(); };

int main()
{
	int x = 5;

	auto isEmpty = [x](auto val)->auto { std::cout << x << ", " << val << std::endl; return val; };

	cout << isEmpty(true) << endl;
}

A lambda cannot be declared as a member variable

Code Block
languagecpp
#include <iostream>

using namespace std;

class Point
{
public:
	Point(int px, int py) :x(px), y(py) {}

	const int& getX() const { return x; }
	const int& getY() const { return y; }

private:
	int x;
	int y;
	auto  isEqual = [](auto &pp)->bool {return pp.getX() == pp.getY(); }; // This line will NOT compile
};

int main()
{
	int x = 5;

	auto isEmpty = [x](auto val)->auto { std::cout << x << ", " << val << std::endl; return val; };

	cout << isEmpty(true) << endl;

	Point np{ 4, 7 };
}

Lambdas can be returned from methods

Code Block
languagecpp
#include <iostream>

using namespace std;

class Point
{
public:
	Point(int px, int py) :x(px), y(py) {}

	const int& getX() const { return x; }
	const int& getY() const { return y; }

	auto	buildFunctor()
	{
		return [this]()->bool {return this->getX() == this->getY(); };
	}

private:
	int x;
	int y;
};

auto  isEqual = [](auto &pp)->bool {return pp.getX() == pp.getY(); };

int main()
{
	int x = 5;

	auto isEmpty = [x](auto val)->auto { std::cout << x << ", " << val << std::endl; return val; };

	cout << isEmpty(true) << endl;

	Point np{ 4, 7 };

	auto result = isEqual(np);

	cout << result << endl;

	auto lf = np.buildFunctor();

	cout << lf() << endl;
}