<div dir="ltr">This rule does not seem to be widely followed by Clang today. Looking at Parser and Sema, many getters (0 argument functions with names matching /^get[A-Z]/) return mutable references to long-lived objects. Looking through Decl.h, things are a little different: we rarely return references, but do frequently return pointers that provide mutable access to contained objects.</div>
<div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Mar 4, 2014 at 5:49 PM, Chandler Carruth <span dir="ltr"><<a href="mailto:chandlerc@google.com" target="_blank">chandlerc@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class=""><br><div class="gmail_quote">On Mon, Mar 3, 2014 at 4:42 PM, Chris Lattner <span dir="ltr"><<a href="mailto:sabre@nondot.org" target="_blank">sabre@nondot.org</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Ok, can this be generalized into guidance we can put in the coding standards?</blockquote></div><br></div>I mean, maybe. I'm not sure it comes up frequently enough to be worth space.</div>

<div class="gmail_extra"><br></div><div class="gmail_extra">My off-the-cuff idea of how to say this in the guide would be:</div><div class="gmail_extra"><br></div><div class="gmail_extra">"""</div><div class="gmail_extra">

When providing getters and setters in APIs they should generally have value semantics: the returned object from a getter should be immutable or a copy, and arguments to the setter should be copied into the object. Naturally, if the member is itself a pointer, this applies to the pointer and not the pointee. If you are providing access to contained objects through some transparent view like iterators, ranges, or adaptors these should have reference semantics and be distinct from either a getter or a setter.</div>

<div class="gmail_extra">"""</div><div class="gmail_extra"><br></div><div class="gmail_extra">But this isn't terribly satisfying to me as a rule. It's much easier to talk in context about specific APIs than provide this level of guidance IMO.</div>

</div>
<br>_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div><br></div>