#include <iostream>
#include <memory>
using namespace std;
class Temp{
};
template<typename T, typename Arg>
shared_ptr<T> factory(Arg arg)
{
return shared_ptr<T>(new T(arg));
}
// template<typename T, typename Arg>
// shared_ptr<T> factory(Arg&& arg)
// {
// return shared_ptr<T>(new T(std::forward<Arg>(arg)));
// }
int main() {
Temp temp = Temp();
shared_ptr<Temp> pointer = factory<Temp>(temp);
cout << "Hello World!";
return 0;
}