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 ответов

15 просмотров

В 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 скорее показалось, что это он сломался и не по стандарту шпарит...

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
1
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Карта сайта