Syntax differences in variadic template parameter pack forwarding
问题 While working with variadic templates I have come across two different ways of writing a call to std::forward , but I am left wondering what the actual difference between the two syntaxes? template<typename... T> void one(T&&... args) { foo(std::forward<T&&...>(args...)); } template<typename... T> void two(T&&... args) { foo(std::forward<T&&>(args)...); } According to my compilers these are both valid syntax, and in most cases the compiler does not complain. But I have found some cases where