|
Boost : |
From: William Kempf (sirwillard_at_[hidden])
Date: 2000-11-18 11:00:18
--- In boost_at_[hidden], Jesse Jones <jejones_at_a...> wrote:
> >On Fri, 17 Nov 2000 14:49:26 -0800
> >Jesse Jones <jejones_at_a...> wrote:
> >> >> This makes it tougher to include the bool
> >> >> conversion (how do we know if a functor has a real target or
> >> >> not?), which I consider essential.
> >> >
> >> >The bool conversion can be handled by inclusion of a default
> >> >constructor that sets the "impl" pointer to null.
> >>
> >> Yep (of course a const void* conversion would be better than
bool).
> >
> >Why is that? A bool conversion says "valid" or "invalid" to call.
>
> No, a bool conversion says that I can be implcitly converted to a
bool
> which can in turn be used used in an arithmetic expression. So,
nonsense
> like
> callback<void> c(Foo);
> int sum = c + 1;
> compiles just fine. This is a big enough problem that I never use
bool
> conversion operators.
I honestly don't see this particular example as being a problem at
all, let alone a big one. Who cares if the above compiles? It won't
hurt anything, and it may well be that the programmer intended the
above to work just in the way that it does. Given only that example
it seems like we're spending too much effort on safety over
useability. Is there a more compelling example that shows true
danger?
> >A const void* implies some sort of useful value (which would
be...?).
>
> It doesn't neccesarily imply that you can do anything useful with
the value
> other than compare it to NULL or another void*.
Or compare it to any value that can be implicitly converted to void*,
which includes any other pointer type. So you can compare
the "callback" with a function pointer with (possibly surprising)
results.
> However the conversion
> rules make const void* much more type safe than bool's.
I've yet to see any arguments that convince me of this. The opposite
was decided for boost::any (though they removed the implicit
conversion entirely, I believe, which may or may not be appropriate
here).
Bill Kempf
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk