In C++ we can model a type like below,
struct Q{}; struct P{ P(Q q){} }; P fun(){return Q();} // implicitly call P(Q(