#include <cmath>
#include <iostream>

struct dummy;

struct Int
{
	int i;
	Int() : i(0) {}
	Int(const int& i) : i(i) {}
	
	dummy operator*();
};

struct dummy
{
	Int* p;
	dummy(Int* const p) : p(p) {}
	
	int& operator*()
	{
		return p->i;
	}
};

dummy Int::operator*()
{
	return dummy(this);
}



int operator*(const Int& lhs, const dummy& rhs)
{
	return std::pow(lhs.i, rhs.p->i);
}


int main() {
	Int a(2);
	Int b(2);
	std::cout<< a ** b << std::endl; 
}
