//Need to compile with modern c++ compiler (I used c++17)
#include<iostream>
template<typename T>
class Object;
template<typename T,typename U=T>
Object<U> make_object( T t /*U&& u ,if want other type of Object ??*/){
Object<T> o;
o.x=t;
return o;
}
template<typename T>
class Object{
private:
T x;
public:
Object(){x=0;}
void getX(){ std::cout<<x<<std::endl;};
template <typename X,typename U>
friend Object<U> make_object(X x);
};
int main (){
//Object<int> o;
int x=100;
auto obj = make_object(x);
obj.getX();
return 0;
}