Я использовал версию 1.9 и все еще получаю эту ошибку. У меня были непримененные миграции, и это было основной причиной в моем случае. Я побежал «python manage.py migrate
», чтобы применить их, и это сработало для меня.
According to this page, gcc has had static_assert
since 4.3.
На самом деле это не отвечает на вопрос, но мне больше нравятся утверждения времени компиляции, основанные на case-case , например
#define COMPILE_TIME_ASSERT(cond) do { switch(0) { case 0: case cond: ; } } while (0)
Работает также в C, а не только в C ++.
Следующий код работает должным образом с g ++ 4.4.0 при компиляции с флагом -std = c ++ 0x
:
int main() {
static_assert( false, "that was false" );
}
он отображает:
x.cpp: In function 'int main()':
x.cpp:2: error: static assertion failed: "that was false"
If you need to use a gcc version which does not support it you can use
#include <boost/static_assert.hpp>
BOOST_STATIC_ASSERT( /* assertion */ )
Basically, what boost does is this:
Declare (but don't define!) a
template< bool Condition > struct STATIC_ASSERTION_FAILURE;
Define a specialization for the case that the assertion holds:
template <> struct STATIC_ASSERTION_FAILURE< true > {};
Then you can define STATIC_ASSERT like this:
#define STATIC_ASSERT(Condition) \
enum { dummy = sizeof(STATIC_ASSERTION_FAILURE< (bool)(Condition) > }
The trick is that if Condition is false the compiler needs to instantiate the struct
STATIC_ASSERTION_FAILURE< false >
in order to compute its size, and this fails since it is not defined.
Если у вас старый gcc или старый стандарт C ++, или вы используете C, вы можете эмулировать static_assert, как описано здесь: http: //www.pixelbeat. org / programming / gcc / static_assert.html