Если вам нужно использовать версию gcc, которая не поддерживает ее, вы можете использовать
#include <boost/static_assert.hpp>
BOOST_STATIC_ASSERT( /* assertion */ )
По сути, это повышение:
Объявить (но не определять!) A
template< bool Condition > struct STATIC_ASSERTION_FAILURE;
Определите специализацию для случая, когда выполняется утверждение:
template <> struct STATIC_ASSERTION_FAILURE< true > {};
Тогда вы можете определить STATIC_ASSERT следующим образом:
#define STATIC_ASSERT(Condition) \
enum { dummy = sizeof(STATIC_ASSERTION_FAILURE< (bool)(Condition) > }
Хитрость в том, что если условие ложно, компилятору необходимо создать экземпляр структуры
STATIC_ASSERTION_FAILURE< false >
, чтобы вычислить его размер, и это не удается, поскольку он не определен.