class tuple {
	int* array;
	int size;
public:
	tuple(int* a, int s) : array(new int[s]), size(s) {
		for(int i=0 ; i<s; ++i)
			array[i]=a[i];
	}
	~tuple() { delete[] array;}
	tuple (const tuple& t) : tuple(t.array, t.size) { };
	
	class iterator {
		tuple* origin;
		int index;
		iterator(tuple* o, int i) : origin(o), index(i) { }
		friend class tuple;
	public:
		iterator(const iterator&) = default;
	};
	iterator begin() { return iterator(this, 0); }
	iterator end() { return iterator(this, size); }
};

int main() {
	int myarray[2] = {42, 43};
	tuple mytuple(myarray, 2);
	tuple::iterator iterator1 = mytuple.begin();
	tuple::iterator iterator2 = mytuple.end();
	iterator2(iterator1);
	return 0;
}