I have a class A and it has two method foo which are actually overloaded. The class somewhat look like this 

```
class A
{
public:
    bool foo(int& a);
    bool foo(size_t& a);
};

bool A::foo(int& a)
{
    return true;
}

bool A::foo(size_t& a)
{
    int new_a = a;
    return foo(new_a);  // here Cl throws me warning C4717: 'hweudm::UDMAbstractBaseEntity::SetAttribute' : recursive on all control paths, function will cause runtime stack overflow
}

int main()
{
    A aObj;
    size_t val = 12;
    aObj.foo(val);
    return 0;
}

```

From the code it does not look ambiguous. But I don't want to this warning during compilation. So can Anyone tell me 

1. Why I am getting this warning even though I have type casted size\_t to int ?
2. whether this will be be an error not a warning on GCC.