template <typename Fun>
class Function;
template <typename Ret, typename... Args>
class function
{
private:
class callable_base
public:
virtual Ret call(Args...) = 0;
};