#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQXJnMT4Kc3RkOjp1bmlxdWVfcHRyPFQ+IGZvcndhcmRpbmdfcHJvYmxlbShBcmcxIGFyZzEpCQkJCQkvLyDRjdGC0L4g0L3QtSDQtNC+0LvQttC90L4g0LfQsNGA0LDQsdC+0YLQsNGC0Ywg0L3QsCDRgtC10YHRgtC+0LLQvtC8INC/0YDQuNC80LXRgNC1CnsJCQoJcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxUPihuZXcgVChhcmcxKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEFyZzE+CnN0ZDo6dW5pcXVlX3B0cjxUPiBmb3J3YXJkaW5nX3NvbHV0aW9uKEFyZzEmJiBhcmcxKQkJCQkJLy8g0Y3RgtC+INC/0YDQtdC00LvQsNCz0LDQtdGC0YHRjyDQutCw0Log0YDQtdGI0LXQvdC40LUsINC90L4g0L7QvdC+INC90LUg0L/QvtC90LDQtNC+0LHQuNC70L7RgdGMCnsKCXJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8VD4obmV3IFQoc3RkOjpmb3J3YXJkKGFyZzEpKSk7Cn0KCmNsYXNzIEQKewpwdWJsaWM6CglEKHN0ZDo6dmVjdG9yPGludD4qIHZlYykgOiB2eyB2ZWMgfSB7fQpwcml2YXRlOgoJc3RkOjp2ZWN0b3I8aW50PiogdjsKfTsKCnZvaWQgdGVzdCgpCnsKCWF1dG8gcG9pbnRlciA9IGZvcndhcmRpbmdfcHJvYmxlbTxEKj4obmV3IEQobmV3IHN0ZDo6dmVjdG9yPGludD57MCwwLDd9KSk7CQkvLyDQstC80LXRgdGC0L4g0L7RiNC40LHQutC4INC60L7QvNC/0LjQu9GP0YbQuNC4INCy0YHRkSDQvdC+0YDQvNCw0LvRjNC90L4g0LfQsNC/0YPRgdC60LDQtdGC0YHRjwp9CgppbnQgbWFpbigpIAp7Cgl0ZXN0KCk7CglyZXR1cm4gMDsKfQ==