セキュアなコードの書き方 – セキュアな設計が最も重要(mycom.co.jp)より、MSの人が見抜けなかったバグ。
1:template <typename T> 2: 3:static T MaxInt() { 4: if( IsSigned() ) { 5: return (T)~( 1 << ( BitCount()-1 ) ); 6: } 7: //else 8: return (T)(~(T)0); 9:}
たしかにわからん。
正解は、5行目の左側の1をTにキャストしてからシフトしないと普通のintのシフトになってビットが消えちゃう、というものらしい。なるほどねぇ。