template class Function; template class function { private: class callable_base { public: virtual Ret call(Args...) = 0; }; template class callable : public callable_base { private: Fun _f; public: callable(Fun f):_f(f) {} virtual Ret call(Args... args) { return _f(std::forward(args)...); } }; public: };