Fix a compile error in opposite_colors()
authorMarco Costalba <mcostalba@gmail.com>
Sat, 2 Jun 2012 07:51:58 +0000 (08:51 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Sat, 2 Jun 2012 08:04:11 +0000 (09:04 +0100)
Error is due to ambiguous overloading of operator^
because we have both the built-in operator^(int, int)
and the user defined operator^(Bitboard, Square).

This error does not trigger when using Makefile becuase,
due to luck, the user defined operator^(Bitboard, Square)
happens to be always defined _after_ opposite_colors() so
that compiler does not claim. But in case of Microsoft MSVC
we don't have a Makefile and the order of files compilation
is chosen by the compiler (in an unpredictable way). So it
could still happen that error is not detected (as in my case),
but in another case the order of compilation of the files could
be so that at some point both operator^ were defined before
opposite_colors() and this triggers the error.

The fix is much simpler than the explanation :-)

Reported by Quocvuong82.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/types.h

index bbfd0c71a73194c5f9c78249d13658ce3b9f3b79..40a2baa0099e2da6ac006cc6bc6b86c225169374 100644 (file)
@@ -392,7 +392,7 @@ inline Rank relative_rank(Color c, Square s) {
 }
 
 inline bool opposite_colors(Square s1, Square s2) {
-  int s = s1 ^ s2;
+  int s = int(s1) ^ int(s2);
   return ((s >> 3) ^ s) & 1;
 }