fork download
  1. #include <iostream>
  2. #include <memory>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. template<typename T, typename Arg1>
  7. std::unique_ptr<T> forwarding_problem(Arg1 arg1) // это не должно заработать на тестовом примере
  8. {
  9. return std::unique_ptr<T>(new T(arg1));
  10. }
  11.  
  12. template<typename T, typename Arg1>
  13. std::unique_ptr<T> forwarding_solution(Arg1&& arg1) // это предлагается как решение, но оно не понадобилось
  14. {
  15. return std::unique_ptr<T>(new T(std::forward(arg1)));
  16. }
  17.  
  18. class D
  19. {
  20. public:
  21. D(std::vector<int>* vec) : v{ vec } {}
  22. private:
  23. std::vector<int>* v;
  24. };
  25.  
  26. void test()
  27. {
  28. auto pointer = forwarding_problem<D*>(new D(new std::vector<int>{0,0,7})); // вместо ошибки компиляции всё нормально запускается
  29. }
  30.  
  31. int main()
  32. {
  33. test();
  34. return 0;
  35. }
Success #stdin #stdout 0s 4480KB
stdin
Standard input is empty
stdout
Standard output is empty