<div dir="ltr">Suppose that I have some non-const reference ref of type T&. Suppose that I have some expression, e.g.:<div><div>RunFunction(ref.CallSomeMethod())</div><div><br></div><div>where overloaded CallSomeMethod has signatures</div><div>int& T::CallSomeMethod() &;<br></div><div>const int& T::CallSomeMethod() const&;<br></div><div><br></div><div>What is the best way to determine though AST if the the program would still compile with the following modification?</div><div>RunFunction(static_cast<const T&>(ref).CallSomeMethod())</div><div><br></div><div>I'm writing a refactoring tool which rewrites public fields to fields with getters. The thing is, I have different member functions for const and mutable access, e.g.:</div><div>int& T::MutableField() &;</div><div>const int& T::Field() const&;</div><div><br></div><div>I would like to be able to distinguish between const/mutable access using AST.</div></div><div><br></div><div>Best,</div><div>Nikita</div></div>