No implicit conversion in operator overloading
See the following code.     

    struct GMan
    {
       int a,b;
    
       GMan():a(),b(){}
       GMan(int _a):a(_a),b(){}
       GMan(int _a, int _b):a(_a),b(_b){}
    
       GMan operator +(const GMan& _b)
       {
             GMan d;
             d.a = this->a + _b.a;
             d.b = this->b + _b.b;
             return d;
       }
    
    };
    
    int main()
    {
       GMan d1(1,2),d(2);
       GMan d3;
       d3 = d1 + 4; 
       d3 = 4 + d1;
    }

d3 = d1 + 4; works but d3 = 4 + d1 doesn't even though 4 can be converted implicitly to GMan type. Why isn't d3 = 4 + d1; equivalent to d3 = GMan(4) + d1; ?

TIA


No implicit conversion in operator overloading
===

See the following code.     

    struct GMan
    {
       int a,b;
    
       GMan():a(),b(){}
       GMan(int _a):a(_a),b(){}
       GMan(int _a, int _b):a(_a),b(_b){}
    
       GMan operator +(const GMan& _b)
       {
             GMan d;
             d.a = this->a + _b.a;
             d.b = this->b + _b.b;
             return d;
       }
    
    };
    
    int main()
    {
       GMan d1(1,2),d(2);
       GMan d3;
       d3 = d1 + 4; 
       d3 = 4 + d1;
    }

d3 = d1 + 4; works but d3 = 4 + d1 doesn't even though 4 can be converted implicitly to GMan type. Why isn't d3 = 4 + d1; equivalent to d3 = GMan(4) + d1; ?

TIA

