R>Можно заморочиться, и сделать универсальный Maker:
R>http://coliru.stacked-crooked.com/a/401ae1d975a23db1
Вот такой еще вариант. Это, по-моему, даже лучше — можно легко адаптировать как под создание различных поинтеров, так и под непосредственное создание объектов:
http://coliru.stacked-crooked.com/a/3fcdc4eeaf7a5fa1
template <typename F>
class Maker
{
public:
explicit Maker(F&& f) : m_f(std::forward<F>(f)) {}
operator auto() && { return m_f(); }
private:
F m_f;
};
template <typename F>
Maker(F&&) -> Maker<F>;
template <typename T, typename... A>
auto unique_maker(A&&...args) { return Maker([&]{ return std::make_unique<T>(std::forward<A>(args)...); }); }