Может кто-нибудь объяснить мне, почему на Земле этот фрагмент кода отказывается работать?Почему я не могу использовать assert с std :: is_same?
#include <cassert>
#include <type_traits>
using namespace std;
int main()
{
assert(is_same<int, int>::value);
}
компиляция терпит неудачу, потому что, в соответствии с компилятором:
prog.cpp:7:33: error: macro "assert" passed 2 arguments, but takes just 1
assert(is_same<int, int>::value);
^
prog.cpp: In function 'int main()':
prog.cpp:7:2: error: 'assert' was not declared in this scope
assert(is_same<int, int>::value);
^
Что? is_same<int, int>::value
, несомненно, один аргумент. Также assert
-, объявленный в этой области, и сам компилятор подтвердил это в предыдущей ошибке!
Почему бы не использовать [ 'static_assert'] (http://en.cppreference.com/ w/cpp/language/static_assert) и предупредить разработчика во время компиляции вместо времени выполнения? –
@CaptainObvlious Я пытаюсь проверить свой собственный код ... и это все равно не производство. – gaazkam
Итак? Вы по-прежнему будете получать сообщение об ошибке, если что-то не так, и гораздо лучше быть информированным во время сборки, вместо того, чтобы справляться с проблемой тестирования и ждать проверки времени выполнения. Вы делаете то же самое, но 'assert' является меньшим из двух вариантов здесь. –