2014-11-07 2 views
0

Предположим, у меня есть пользовательская реализация static assert (потому что мне нужно настроить таргетинг на компилятор, у которого нет встроенного static_assert). Я хочу провести испытание, которое проверяет, чтоКак проверить, что static assert действительно утверждает для «false»?

MY_STATIC_ASSERT(false); 

действительно утверждает. Если я просто напишу такой код - он не будет компилироваться (и поэтому не запускаться). Я бы предпочел, чтобы какой-то фрагмент кода компилировался нормально, когда код выше не работает и не скомпилируется, когда код выше компилируется.

Возможно ли это? Могу ли я установить время компиляции (или, по крайней мере, время выполнения), что мой статический аргумент действительно утверждает «ложь»?

+0

ahh, старый вопрос - кто проверяет участников! – gbjbaanb

ответ

1

Конечно, вы можете иметь «время компиляции» чек - до тех пор, как вы собираете что-то совсем другое:

// test_my_static_assert.cpp 

#include "my_static_assert.h" 

int main() { 
    MY_STATIC_ASSERT(false); 
} 

// compile.sh 
if g++ test_my_static_assert.cpp; then 
    echo "MY_STATIC_ASSERT failed! Compile succeeded!" 
fi 

Или что-то. Но это должно быть в отдельной программе полностью.

+0

Я предполагаю, что это может быть «шаг сборки» в Visual Studio или эквивалент в другой системе сборки. – sharptooth

Смежные вопросы