#include <iostream>

struct MyStruct
{
	int val = 117;
	
    MyStruct() = default;

	explicit MyStruct( int v ) : val( v  )
	{
	}
	
	~MyStruct()
	{
		std::cout << "~MyStruct " << val << std::endl;
	}

	int* value()
	{
	   return &val;
	}
	
	MyStruct add( int v )
	{
		return MyStruct( val + v );
	}
};

void func( int* val )
{
	std::cout << "value: " << *val << std::endl;
	std::cout << "~func()" << std::endl;
}

int main()
{
	func( MyStruct().add( 5 ).value() );
}