There is nothing wrong with that, but your choice of name is terrible. Someone reads that he has no idea if this is a generic pointer, a unique pointer, an intrusive pointer to a link count or just a raw pointer to a System .
If you really need brevity,
template<class T>using up=std::unique_ptr<T>;
is another symbol at the point of use than your up<System> plan, and makes it more clear that it is a unique pointer and does not require a typedef for each type. Plus, in some cases, this leads to puns.
source share