#include <iostream>
#include <memory>
#include <vector>
using namespace std;

template<typename T, typename Arg1>
std::unique_ptr<T> forwarding_problem(Arg1 arg1)					// это не должно заработать на тестовом примере
{		
	return std::unique_ptr<T>(new T(arg1));
}

template<typename T, typename Arg1>
std::unique_ptr<T> forwarding_solution(Arg1&& arg1)					// это предлагается как решение, но оно не понадобилось
{
	return std::unique_ptr<T>(new T(std::forward(arg1)));
}

class D
{
public:
	D(std::vector<int>* vec) : v{ vec } {}
private:
	std::vector<int>* v;
};

void test()
{
	auto pointer = forwarding_problem<D*>(new D(new std::vector<int>{0,0,7}));		// вместо ошибки компиляции всё нормально запускается
}

int main() 
{
	test();
	return 0;
}