Perfect Forwarding Forwards Objects Not Braced Things Trying To Become Objects -- Raymond Chen
In C++, perfect forwarding is the act of passing a function’s parameters to another function while preserving its reference category. It is commonly used by wrapper methods that want to pass their parameters through to another function, often a constructor.
Perfect Forwarding Forwards Objects, Not Braced Things That Are Trying To Become Objects
By Raymond Chen
From the article:
In C++, perfect forwarding is the act of passing a function’s parameters to another function while preserving its reference category. It is commonly used by wrapper methods that want to pass their parameters through to another function, often a constructor.
template<typename T, typename... Args> std::unique_ptr<T> make_unique(Args&&... args) { return std::unique_ptr<T>( new T(std::forward<Args>(args)...)); }The
make_unique
function takes its parameters, forwards them to theT
constructor, and then puts the pointer to the newly-constructedT
inside aunique_ptr
. Those parameters are forwarded perfectly into the constructor: If the original parameters were rvalue reference, then the constructor receives rvalue reference. If the original parameters were lvalue references, then the constructor receives lvalue reference.But the catch is that it can forward only objects. It can’t forward “braced things that are trying to become objects”.