#include <iostream>
#include <functional>

template<class R,class derived> class Base;
template<class F>
class AnyFunction:public Base<typename std::function<F>::result_type,AnyFunction<F>>{
	std::function<F> Fun;
public:

	typedef typename std::function<F>::result_type RT;

	AnyFunction(std::function<F> Function){
		Fun = Function;
	}

	RT DoFunction(typename std::function<F>::argument_type&& Arge){
		return Fun(Arge);
	}

};

template<class R,class Derived>
class Base
{

public:

	typedef R RT;
public:
	template<class ...Arges>
	RT operator()(Arges&& ... Arge){
		return static_cast<Derived*>(this)->DoFunction(Arge...);
	}
};



int main(){

	AnyFunction<int(int&)> AF([](int& N)->int{std::cout <<"Calling Lambada!"<< std::endl; return N; });

	int N = AF(10);

	std::cout << AF(10) << std::endl;

	return 0;
}