170 похожих чатов

Можно ли как-то сделать юнит тест, где программа должна не

скомпилироваться? Хочу шаблон некой функции проверить.

23 ответов

6 просмотров

static_assert

Если тест не скомпилировался — он не пройден

Напишите скрипт, который будет возвращать ошибку, если компилятор вернёт 0.

Egor-Kulebyakin Автор вопроса
Danya🔥
Если тест не скомпилировался — он не пройден

в общем, у меня есть такая функция: template <typename T> void foo(){ if constexpr (std::is_same_v<T, int>){} else if constexpr (std::is_same_v<T, float>){} else { static_assert(false); } } могу ли я как-то убедиться, что при T=double этот шаблон не соберется?

Egor-Kulebyakin Автор вопроса
Egor Kulebyakin
почему?

Потому что static_assert(false) всегда не скомпилируется

Danya🔥
Он всегда не соберётся

Если int или float, то собраться должен

Egor-Kulebyakin Автор вопроса
Danya🔥
Потому что static_assert(false) всегда не скомпили...

так до туда ведь не должно дойти в некоторых случаях

Egor Kulebyakin
так до туда ведь не должно дойти в некоторых случа...

Можно представить, что там велосипедный my_static_assert<false>{} и тогда это будет семантическая ошибка

Egor Kulebyakin
в общем, у меня есть такая функция: template <type...

Почему бы туда просто не написать static_assert(!std::is_same_v<T, double>);, или нужна свинья?

Egor-Kulebyakin Автор вопроса
Liber Azerate
Почему бы туда просто не написать static_assert(!s...

у меня около 20 типов, а в одном из шаблонов вызывается другой(10 типов), в котором, соответственно, другие типы. Я скорее где-то запутаюсь

Egor Kulebyakin
у меня около 20 типов, а в одном из шаблонов вызыв...

Ээ, и что? Нужно же чтобы этот не собирался с double

Egor Kulebyakin
в общем, у меня есть такая функция: template <type...

template <class T> struct helper { static constexpr int value = 1; }; template <> struct helper<double> { static constexpr int value = -1; }; template <typename T> void foo(T arg){ if constexpr (std::is_same_v<T, int>){ printf("int\r\n"); } else if constexpr (std::is_same_v<T, float>){ printf("float\r\n"); } else { char _[helper<T>::value]; } } И можете тест не писать. Массив с отрицательным размером никогда не соберётся.

Egor-Kulebyakin Автор вопроса
Хитрый Лис
template <class T> struct helper { static constexp...

вариант со статик асертом тоже не соберется. Но мне нужно это загнать в тесты

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

Обсуждают сегодня

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
читать файл максимально быстро? странный вопрос))
zamtmn
53
How to create an OS in C? what to study?
Linus
18
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
а как бы вылезти из ИО, что то типа IO -> Ether или в какую сторону смотреть ? что то туплю
Fedor
9
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
5
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
Карта сайта