Предположим, у меня есть пользовательская реализация static assert (потому что мне нужно настроить таргетинг на компилятор, у которого нет встроенного static_assert
). Я хочу создать тест, который проверяет, что
MY_STATIC_ASSERT(false);
действительно утверждает. Если я просто напишу такой код - он не будет компилироваться (и поэтому не запускаться). Я бы предпочел, чтобы какой-то фрагмент кода компилировался нормально, когда код выше не работает и не скомпилируется, когда код выше компилируется.
Это возможно? Могу ли я установить время компиляции (или, по крайней мере, время выполнения), что мой статический аргумент действительно утверждает "ложь"?
Конечно, у вас может быть проверка "времени компиляции" - если вы полностью компилируете что-то другое:
// 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
Или что-то. Но это должно быть в отдельной программе полностью.