The actual line is #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
The guy asking the question just misread the code, the colon is part of the struct definition and the key part is -!! which coerces an integer to 0 if the value is zero, or -1 if the value is anything other than 0.
They're all key parts. Note that the sizeof is there to avoid polluting the namespace. Otherwise you'd have to declare something that used that anonymous struct. And likewise the parentheses so it can be used in all contexts in an expression. Every byte of that macro is needed. It's pretty elegant, honestly.
These machinations were always necessary to get compile-time asserts. Luckily C++11 and C11 are both providing static_assert so there will be real compiler support instead of having to trick it into dumping an error.
edit: Another common one is using __LINE__ or __COUNTER__ in an array symbol name and having the test value result in an array size of -1.
The guy asking the question just misread the code, the colon is part of the struct definition and the key part is -!! which coerces an integer to 0 if the value is zero, or -1 if the value is anything other than 0.