As Adam Nevraumont pointed out, std::unique_ptr<void*> wont work.
If you're using c++17, std::any is probably your best option.
This would replace std::unique<void> with std::unique<std::any>>. Keep in mind std::unique_ptr<void> won't compile without a lot of extra work.
Best options are:
void*std::unique<std::any>> for smart pointer support + type safetyResources on std::any
Questions related to std::any: