GCC имеет встроенное время компиляции, утверждают?

Я использовал версию 1.9 и все еще получаю эту ошибку. У меня были непримененные миграции, и это было основной причиной в моем случае. Я побежал «python manage.py migrate», чтобы применить их, и это сработало для меня.

17
задан h22 10 January 2013 в 07:37
поделиться

5 ответов

According to this page, gcc has had static_assert since 4.3.

29
ответ дан 30 November 2019 в 10:13
поделиться

На самом деле это не отвечает на вопрос, но мне больше нравятся утверждения времени компиляции, основанные на case-case , например

#define COMPILE_TIME_ASSERT(cond) do { switch(0) { case 0: case cond: ; } } while (0)

Работает также в C, а не только в C ++.

2
ответ дан 30 November 2019 в 10:13
поделиться

Следующий код работает должным образом с 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"
8
ответ дан 30 November 2019 в 10:13
поделиться

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.

16
ответ дан 30 November 2019 в 10:13
поделиться

Если у вас старый gcc или старый стандарт C ++, или вы используете C, вы можете эмулировать static_assert, как описано здесь: http: //www.pixelbeat. org / programming / gcc / static_assert.html

6
ответ дан 30 November 2019 в 10:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: