Здравствуйте, watchmaker, Вы писали:
LK>>автоматически вывести тип, на который указывает указатель, имея только тип самого указателя.
W>std::remove_pointer_t
Да, но не стоит только забывать, что std::remove_pointer применим не только к указателям, а вообще к любым типам. Между тем, ТС собирается применять это к алиасам типов, для которых не известно, является ли данный тип указателем, или чем-то другим. Возможно, имело бы смысл определить собственную метафункцию, во избежание "сюрпризов". Ну хотя бы так:
template <typename, typename = void>
struct MySpecialRemovePointer;
template <typename T>
struct MySpecialRemovePointer<T, std::enable_if_t<std::is_pointer<T>::value>> : std::remove_pointer<T> {};