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

2 просмотра

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

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

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

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
Добрый день подскажите пожалуйста может кто то сталкивался с ошибками Sentry 22.10.0 развернутым из helm чарт в Kubernetes? Изначально 3 дня назад очень стало много событий ух...
Tire4 Finist Devops
1
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
почому оно не работает?
Vi Chapmann ٩( 💢•̀ з•́)و Chapmann
19
всем привет почти закончил курс После него можно писать свою операционку? Какие библиотеки надо использовать и куда дальше копать для изучения
Linus
22
Так а кто может спарсить всех участников чата? Идишники
Magic
18
Карта сайта