Using Type& as the parameter type will not allow perfect forwarding. The purpose of std::forward is to preserve the value category (lvalue or rvalue) of the argument passed to the constructor, but since you are using Type&, it will only forward as an lvalue reference. To fix this, you need to change the parameter type to Type&&, which will allow both lvalues and rvalues to be forwarded correctly