Thread overview
implicit conversion of reference to bool?
Jul 23, 2005
John Bell
Jul 23, 2005
Stefan
Jul 24, 2005
John Bell
Jul 24, 2005
Manfred Nowak
July 23, 2005
I am confused by this in the documentation:

if (cast(B) o)
{
	// o is an instance of B
}
else
{
	// o is not an instance of B
}

Does this mean that a reference can be implicitly converted to a bool?

Thanks.
July 23, 2005
That's the same as:

# B ref = cast(B) o;
# if (ref) {
# ...

where "if (ref)" is a shortcut for "if (ref is null)".
It's the same as in C.  if() works with any int, where int == 0 evaluates
to false and any int <> 0 to true. Hope this helps.

Regards,
Stefan


In article <dbsad1$23q7$1@digitaldaemon.com>, John Bell says...
>
>I am confused by this in the documentation:
>
>if (cast(B) o)
>{
>	// o is an instance of B
>}
>else
>{
>	// o is not an instance of B
>}
>
>Does this mean that a reference can be implicitly converted to a bool?
>
>Thanks.


July 24, 2005
Stefan wrote:
> That's the same as:
> 
> # B ref = cast(B) o;
> # if (ref) {
> # ...
> 
> where "if (ref)" is a shortcut for "if (ref is null)".
> It's the same as in C.  if() works with any int, where int == 0 evaluates
> to false and any int <> 0 to true. Hope this helps.
> 
> Regards,
> Stefan


Thanks for the reply.  I just thought D worked differently.  The documentation states that the expression checked in an if statement must be a type that can be converted to a boolean.  And as I understand it a bool is a bit.  And I thought that while a bit could be implicitly converted to an int, an int could not be implicitly converted to a bit. So, the statement had me confused.
July 24, 2005
John Bell <jdwbell@yahoo.com> wrote:

[...]
> The
> documentation states that the expression checked in an if
> statement must be a type that can be converted to a boolean.
[...]

You are right and pointers cannot be converted implicitely to booleans. Therefore the documentation at least misses to describe an exceptional behaviour of the language, that is context dependent.

-manfred