Consider the following code:
template class StaticAssert; template<> class StaticAssert {}; StaticAssert< (-1 < sizeof(in
Because unsigned is stronger then signed and -1 converted to unsigned value as of size_t , so actually -1 == 0xFFFFFFFF > 4
size_t
-1 == 0xFFFFFFFF > 4
This is how it should work according to C++ standard