I often see perfect forwarding listed for constructor arguments, but not usually for functions with a return or methods. Here is my solution for an method method of class Cls: template<typename...Args>staticautomethod(Cls*cls,Args&&...args)->typenamestd::result_of<decltype(&Cls::method)(Cls,Args...)>::type{returncls->method(std::forward<Args>(args)...);} This is useful if you want to call protected classes from a “helper” friend class, for example, to expose them to tests without having t...