Expression was too complex to be solved in reasonable time

Nate wrote:

I have four bool values: topLeft, bottomLeft, topRight, and bottomRight

the following line throws an error:

let value = Int(topLeft.hashValue) | Int(topRight.hashValue) << 1 |

Int(bottomLeft.hashValue) << 2 | Int(bottomRight.hashValue) << 3

"Expression was too complex to be solved in reasonable time; consider

breaking up the expression into distinct sub-expressions."

It's really unfortunate how operator overloading and "integer literals" don't play nicely together any more.

Rather than break up the expression, you can change each integer literal to specify its type, e.g. change:



    (3 as Int)

That way you can have the expression structure that you want rather than having to break expressions into separate statements (which is particularly important if you want to take advantage of short-circuit logical operators such as && and ||).