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

Есть такая проблема, что в static assert в некоторых компиляторах(

не буду показывать пальцем) нельзя просто вставить false, т.к. он будет проверен даже если не инстанцировался шаблон(например). В стандартной библиотеке видел такую штуку типо always_false переменная шаблонная, но туда нужно передавать шаблонный аргумент, который иногда неудобно делать, в итоге написал такую штуку, это решит проблему?
// for static asserts ( or other shit ), that dont work if not used. Implicit template, so it needs to be instantiated
consteval inline bool always_false(auto x) noexcept {
return false;
}

16 ответов

18 просмотров

В static_assert ни в одном standard compliant компиляторе нельзя вставить false.

Kelbon- Автор вопроса

И в чем отличие always_false<T> от always_false(var)? И там, и там необходим dependent context

Kelbon- Автор вопроса
Alexander Karaev
И в чем отличие always_false<T> от always_false(va...

у меня шаблон на переменной, я не могу передать его в always_false<T>

Kelbon
у меня шаблон на переменной, я не могу передать ег...

От "шаблона на переменной" можно взять decltype, если я правильно распарсил

Kelbon- Автор вопроса
Denis P
пример есть?

template<Mode MathMode> Transformation_matrix(float angle_in_rad, const Vector<float, dimension, MathMode>& rotation_axis) noexcept { if constexpr (dimension == 4) { } else { static_assert(always_false(false), "ERRIR"); } }

Kelbon- Автор вопроса
Alexander Karaev
От "шаблона на переменной" можно взять decltype, е...

ну как бы да, но это уже лишние знаки, я чет про это не подумал

template<typename = decltype([]{})> constexpr inline auto always_false = false; И не надо ничего руками передавать. Ну, и так уж получилось, что в моём коде на практике мёртвых ветвей обычно не возникает – такое чаще в отладке полезнее, а для этого есть альтернатива по-проще: static_assert(![]{}, "...");

Ofee Oficsu
template<typename = decltype([]{})> constexpr inli...

какой компилятор так умеет интересно) я про первое

Kelbon- Автор вопроса
Ofee Oficsu
template<typename = decltype([]{})> constexpr inli...

скопировал этот код, пишет аргумент лист пропущен

Kelbon
в msvc у меня работало

Ты видимо не включил режим "работать по стандарту"

Kelbon- Автор вопроса
Kirill Bolshakov
Ты видимо не включил режим "работать по стандарту"

ну не знаю, при переключении на clang скорее показалось, что это он сломался и не по стандарту шпарит...

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта