не буду показывать пальцем) нельзя просто вставить 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;
}
В static_assert ни в одном standard compliant компиляторе нельзя вставить false.
в msvc у меня работало
И в чем отличие always_false<T> от always_false(var)? И там, и там необходим dependent context
у меня шаблон на переменной, я не могу передать его в always_false<T>
От "шаблона на переменной" можно взять decltype, если я правильно распарсил
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"); } }
ну как бы да, но это уже лишние знаки, я чет про это не подумал
template<typename = decltype([]{})> constexpr inline auto always_false = false; И не надо ничего руками передавать. Ну, и так уж получилось, что в моём коде на практике мёртвых ветвей обычно не возникает – такое чаще в отладке полезнее, а для этого есть альтернатива по-проще: static_assert(![]{}, "...");
какой компилятор так умеет интересно) я про первое
На данный момент все, кроме шланга
скопировал этот код, пишет аргумент лист пропущен
Если там template <size_t I> , то decltype(I) не dependent
Ты видимо не включил режим "работать по стандарту"
ну не знаю, при переключении на clang скорее показалось, что это он сломался и не по стандарту шпарит...
Обсуждают сегодня