The return type of std::forward
depends on the template type, and can not be recovered from the args. Attempting to do so will result in a compile failure. For example, make_secure_unique<std::string>(std::string{});
does not compile on current master, but does with this pull.
Another example would be make_secure_unique<std::pair<std::string, std::unique_ptr<int>>>(std::string{}, std::make_unique<int>(21));