[PATCH] D15814: Implicit conversion from float->bool

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Wed Dec 30 09:30:36 PST 2015


On Dec 30, 2015 6:34 AM, "Aaron Ballman" <aaron.ballman at gmail.com> wrote:
>
> aaron.ballman closed this revision.
> aaron.ballman added a comment.
>
> Thanks! I've commit in r256643.
>
>
> ================
> Comment at: test/SemaCXX/warn-literal-conversion.cpp:49-50
> @@ +48,4 @@
> +  // values.
> +  bool b3 = 0.0f;
> +  bool b4 = 0.0;
> +}
> ----------------
> rsmith wrote:
> > What about
> >
> >   bool b5 = 1.0;
> >   bool b6 = 2.0;
> >
> > ? Arguably any `float` -> `bool` conversion changes the value (because
`true` and `false` are not values of type `float`), so it wouldn't be
completely unreasonable to warn even if the literal is `0.0`.
> Except those conversions won't cause confusion to the user, so I'm not
certain what we gain by diagnosing. Given that some mental models expect
0.99 to convert to 0, which converts to false (because bool is an integral
type, so it "must" do the usual integral truncation dance), it makes sense
to tell the user "no no no, that converts to true." I'm less convinced
about the utility of warning on things like `bool b = 1.99f' where it
changes the value from 1.99 to true. Perhaps this should be changed to only
diagnose when converting through an integer would result in a different
value that converting through the float?

Let me ask a slightly different question: when would it ever be reasonable
and intentional to initialize a bool from a floating-point *literal*? For
integers, people use things like

  int n = 1e6;

which is why we don't complain if the literal is exactly representable in
the integer type. I can't imagine any similar cases for bool.

>
> http://reviews.llvm.org/D15814
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20151230/6fa4959e/attachment.html>


More information about the cfe-commits mailing list