#include <iostream>
#include <functional>

class Bang
{
public:
	Bang(int i = 0) : m_val(i)
	{
		m_foo = [bang = *this] { std::cout << bang.m_val << std::endl; };
	}

	~Bang()
	{
		m_val = -1;
	}

	void Foo()
	{
		m_foo();
	}
private:
	int m_val;
	std::function<void()> m_foo;
};

Bang GetBang()
{
	return Bang(100500);
}

int main()
{
	Bang b;
	b = GetBang();
	b.Foo();
	return 0;
}
