Скорее всего, вы получите ошибки во время компиляции, потому что T*&&
- это , а не - идеальное средство пересылки.Только T&&
есть.Таким образом, ваш ptr
параметр принимает только значения .И в дополнение к этому, ваш std::forward<T&&>
должен быть std::forward<T*>
, но, конечно, теперь, когда у вас есть другая ошибка, это не имеет значения.И в дополнение к , что вызов do_something_with_them
пропускает базовый случай do_something_with_them
с нулевыми параметрами, потому что если args
пусто ...
Если вы действительнотолько хотите принимать указатели, вы можете работать с enable_if
и is_same
или is_convertible
.Но тогда, конечно, я не думаю, что это «пересылка» больше.А как насчет
template<typename T, typename ...Args>
auto do_something_with_them(T&&t, Args&&...args)
-> decltype(do_something_with_it(std::forward<T>(t)))
{ ... }
Таким образом, вы позволяете do_something_with_it
решать, принимает ли он аргумент (если вы хотите, вы можете также поместить рекурсивный вызов в этот decltype
.читатель относительно того, какой оператор может понадобиться здесь).Но, конечно, do_something_with_it
имеет ту же проблему, что и не является универсальным.