Home | Libraries | People | FAQ | More |
BOOST_STATIC_ASSERT
works as follows. There is class STATIC_ASSERTION_FAILURE
which is defined as:
namespace boost{
template <bool> struct STATIC_ASSERTION_FAILURE;
template <> struct STATIC_ASSERTION_FAILURE<true>{};
}
The key feature is that the error message triggered by the undefined
expression sizeof(STATIC_ASSERTION_FAILURE<0>)
, tends to be consistent
across a wide variety of compilers. The rest of the machinery of
BOOST_STATIC_ASSERT
is just a way to feed the sizeof
expression into a typedef
.
The use of a macro here is somewhat ugly; however boost members have spent
considerable effort trying to invent a static assert that avoided macros,
all to no avail. The general conclusion was that the good of a static assert
working at namespace, function, and class scope outweighed the ugliness of a macro.
Copyright © 2000, 2005 Steve Cleary and John Maddock |