<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Mar 25, 2015 at 3:24 PM, Richard <span dir="ltr"><<a href="mailto:legalize@xmission.com" target="_blank">legalize@xmission.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
In article <<a href="mailto:CAENS6EvLVQkc-_0Ajogg0QAvvEMCca8wX8N9prft891FEO37mg@mail.gmail.com">CAENS6EvLVQkc-_0Ajogg0QAvvEMCca8wX8N9prft891FEO37mg@mail.gmail.com</a>>,<br>
<span class="">    David Blaikie <<a href="mailto:dblaikie@gmail.com">dblaikie@gmail.com</a>> writes:<br>
<br>
> On Tue, Mar 24, 2015 at 5:05 PM, Richard <<a href="mailto:legalize@xmission.com">legalize@xmission.com</a>> wrote:<br>
</span>> > Am I missing anything?<br>
<span class="">><br>
> Maybe special case chars for "return e != '\0';" ? hard to tell if it's<br>
> chars being used as bytes or chars being used as textual characters,<br>
> though... - and hard to tell what the common codebase convention is as to<br>
> whether "return e;" is better than "return e != 0;" etc... - I'd be sort of<br>
> inclined to just use the expression directly if it's valid (eg: for builtin<br>
> types and implicit conversion operators).<br>
<br>
</span>When I looked this up in the standard, it has language that says it is<br>
as if you had written 'bool(e)'.<br>
<br>
Personally I never liked the "c != '\0'" style because '\0' is just a<br>
more verbose way of writing 0.<br>
<span class=""><br>
> If the type's conversion operator is implicit, it might be fine to "return<br>
> e;"<br>
<br>
</span>Well, for the case where it's a return value it's not as big a deal<br>
because the implicit conversion will be done for you, but when it's a<br>
ternary expression hidden inside another expression, then it can<br>
subtly change the type of the expression and in that case you really<br>
want the explicit comparison to the appropriate kind of zero or an<br>
explicit conversion to bool.<br>
<span class=""><br>
> If the type's conversion operator is explicit, it might be more suitable to<br>
> use static_cast<bool>.<br>
<br>
</span>I like the idea of checking to see if the conversion operator is<br>
implicit or explicit.  I will incorporate that.<br>
<br>
As to whether it should be static_cast<bool>(e) or bool(e), I was<br>
using the latter because that's the wording in the standard.  However,<br>
it's my understanding that the two are equivalent in the case of bool.<br>
<span class=""><br>
>There is "return !!e;" but that's lame...<br>
<br>
</span>Yeah, that's my least favorite and I also agree it is lame :).<br>
<span class=""><br>
> otherwise<br>
> there's probably more explicit type-specific ways to test the object, but<br>
> you won't be able to suggest those automatically. (eg: "return o !=<br>
> nullptr;" for a unique_ptr, etc)<br>
<br>
</span>AFAIK, all the smart pointer classes have bool conversion operators.<br></blockquote><div><br>They do, but they're explicit and my point was "return bool(sp);" is less good than "return sp != nullptr;" - so without knowing the domain-specific bool test it's probably hard to pick/suggest the best fix.<br><br>(std::experimental::optional is different, for example, it's comparable to "nullopt" not nullptr)<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5">--<br>
"The Direct3D Graphics Pipeline" free book <<a href="http://tinyurl.com/d3d-pipeline" target="_blank">http://tinyurl.com/d3d-pipeline</a>><br>
     The Computer Graphics Museum <<a href="http://ComputerGraphicsMuseum.org" target="_blank">http://ComputerGraphicsMuseum.org</a>><br>
         The Terminals Wiki <<a href="http://terminals.classiccmp.org" target="_blank">http://terminals.classiccmp.org</a>><br>
  Legalize Adulthood! (my blog) <<a href="http://LegalizeAdulthood.wordpress.com" target="_blank">http://LegalizeAdulthood.wordpress.com</a>><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>
</div></div></blockquote></div><br></div></div>