Ok, seems like I just did not test the cases that are not working ;)

I think it has nothing to do with the wrapped types or the template at all. It 
is just the + operator that makes problems. And now things are getting really 
strange: 
    
    
    import typetraits
    
    template myadd[L,R](lhs: L, rhs: R): auto =
      echo "lhs is " & $lhs.type.name
      echo "rhs is " & $rhs.type.name
      lhs         # with this line uncommented and the next line commented, the 
code compiles
      #lhs + rhs  # with this line uncommented and the previous line commented, 
the second call to myadd gives an error
    
    var r1 = myadd(2, 2.0) # => "lhs is int" and "rhs is float64" -> works with 
lhs+rhs in myadd
    
    var ai = 2
    var bf = 2.0
    var r2 = myadd(ai, bf) # => "lhs is int" and "rhs is float64" -> error with 
lhs+rhs in myadd (type mismatch: got (int, float64))
    

So at runtime, myadd tells me for both calls that it gets int and float64. 
However, if I uncomment the line "lhs+rhs" in myadd, then the compiler crashes 
in the second call to myadd (ONLY the second). At this point, I think someone 
with a little knowledge about how the compiler works should explain this 
behavior...

Reply via email to