www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Expression for: foo is derived from Clock

reply Brother Bill <brotherbill mail.com> writes:
```Object foo``` is a class instance, perhaps null, perhaps a 
Clock or AlarmClock or Vegetable.

What is the expression to ask the boolean question:
   Is foo of type Clock or a type derived from Clock, such as 
AlarmClock?


I tried the obvious ```foo is Clock```, but this did not compile.
```
Error: type `Object` is not an expression
        bool isClock = (o is Clock)
                             ^
```
Feb 18
parent reply Nick Treleaven <nick geany.org> writes:
On Wednesday, 18 February 2026 at 14:49:56 UTC, Brother Bill 
wrote:
 ```Object foo``` is a class instance, perhaps null, perhaps a 
 Clock or AlarmClock or Vegetable.

 What is the expression to ask the boolean question:
   Is foo of type Clock or a type derived from Clock, such as 
 AlarmClock?
Use a cast: https://dlang.org/spec/expression.html#cast_class
 I tried the obvious ```foo is Clock```, but this did not 
 compile.
 ```
 Error: type `Object` is not an expression
        bool isClock = (o is Clock)
                             ^
 ```
That use of `is` is a different expression: https://dlang.org/spec/expression.html#identity_expressions
Feb 18
parent reply Brother Bill <brotherbill mail.com> writes:
On Wednesday, 18 February 2026 at 14:55:50 UTC, Nick Treleaven 
wrote:
 On Wednesday, 18 February 2026 at 14:49:56 UTC, Brother Bill 
 wrote:
 ```Object foo``` is a class instance, perhaps null, perhaps a 
 Clock or AlarmClock or Vegetable.

 What is the expression to ask the boolean question:
   Is foo of type Clock or a type derived from Clock, such as 
 AlarmClock?
Use a cast: https://dlang.org/spec/expression.html#cast_class
 I tried the obvious ```foo is Clock```, but this did not 
 compile.
 ```
 Error: type `Object` is not an expression
        bool isClock = (o is Clock)
                             ^
 ```
That use of `is` is a different expression: https://dlang.org/spec/expression.html#identity_expressions
That's it! ``` const(Clock) clock = cast(const Clock)o; ``` If clock is null, then o is either ```null``` or not derived from Clock. Otherwise o, such as AlarmClock will have access to only the Clock features of o.
Feb 18
parent Steven Schveighoffer <schveiguy gmail.com> writes:
On Wednesday, 18 February 2026 at 15:05:16 UTC, Brother Bill 
wrote:
 On Wednesday, 18 February 2026 at 14:55:50 UTC, Nick Treleaven 
 wrote:
 That use of `is` is a different expression:
 https://dlang.org/spec/expression.html#identity_expressions
That's it! ``` const(Clock) clock = cast(const Clock)o; ``` If clock is null, then o is either ```null``` or not derived from Clock. Otherwise o, such as AlarmClock will have access to only the Clock features of o.
FYI, a very nice idiom for D: ```d if(auto clock = cast(const Clock)o) { // use clock in here as a `Clock` type } ``` This leaves no chance to use clock as a `null` reference. -Steve
Feb 22