<div dir="ltr">Thanks,<div>I wonder why const overloads are not provided in this case...</div><br><div class="gmail_quote"><div dir="ltr">вт, 10 июл. 2018 г. в 11:23, David Tarditi <<a href="mailto:dtarditi@microsoft.com">dtarditi@microsoft.com</a>>:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="m_7750066792126716644WordSection1">
<p class="MsoNormal">It should be safe to do, as long as  the new code that you add to your visitor doesn’t modify AST objects.   I’ve done this in the past and haven’t run into any issues.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><b>From:</b> cfe-dev <<a href="mailto:cfe-dev-bounces@lists.llvm.org" target="_blank">cfe-dev-bounces@lists.llvm.org</a>> <b>On Behalf Of
</b>Roman Popov via cfe-dev<br>
<b>Sent:</b> Thursday, June 28, 2018 5:53 AM<br>
<b>To:</b> Clang Dev <<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>><br>
<b>Subject:</b> [cfe-dev] Is it safe to cast-away constness in RecursiveASTVisitors?<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">Hi all,<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I want to implement RecursiveASTVisitor to find certain nodes in AST.  This class should not modify AST, so I want to make a search method to be const:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">bool MyCallSearch::FindMyCall (const clang::Stmt *rootStmt ) const {<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">     this->TraverseStmt(stmt);       <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">}<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Unfortunately,  RecursiveASTVisitor methods are non-const and accept non-const pointers to AST nodes. So I wonder, is it safe to cast away constness like this ? :<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<div>
<p class="MsoNormal">bool MyCallSearch::FindMyCall (const clang::Stmt *rootStmt ) const {<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">     const_cast<<span style="background:white">MyCallSearch*</span>>(this)->TraverseStmt(const_cast<<span style="background:white">clang::Stmt *</span>>(stmt));       <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">}<u></u><u></u></p>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Roman<u></u><u></u></p>
</div>
</div>
</div>
</div>

</blockquote></div></div>