Regarding your `important` concept: boolean values are treated special, 
compared to other values, in concepts. Boolean `false` is treated the same way, 
as not compiling lines, that is make concept check fail, and `false` is default 
value for `bool`. Other expressions/statements are implicitly wrapped with 
`compiles:`, so return true disregarding of the value of the expression. These 
will match:
    
    
    type important2 = concept x
      x.prop1 is bool  # i.e. `false is bool`, which returns `true`
    type important3 = concept x
        x.prop1 = false  # treated as `compiles: x.prop1 = false`, which 
returns true
    type important3 = concept x
        compiles: x.prop1  # `true`
    type AnotherClass = ref object
      prop1*: int
    type important4 = concept x
        x.prop1 # wiil match `AnotherClass`, because again is treated as 
`compiles: x.prop1`
    echo AnotherClass is important4 # `true`
    var o: AnotherClass
    echo o is important4 # `true`
    

And you meant `is`, using `of`.

Reply via email to