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>
static auto method(Cls* cls, Args && ...args)
-> typename std::result_of<decltype(&Cls::method)(Cls, Args...)>::type {
return cls->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 to require GoogleTest
/GoogleMock
to be avaible for regular users.