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

static_assert(

std::disjunction_v<
std::is_same<TIndex, int>,
std::conjunction<
std::is_enum<TIndex>,
std::is_same<std::underlying_type_t<TIndex>, uint32_t>
>
>
);
я же правильно понимаю, что такое не покатит? как нормально записать "int или enum под которым uint32_t"?

19 ответов

13 просмотров

static_assert(std::is_same_v<TIndex, int> || (std::is_enum_v<TIndex> && std::is_same_v<std::underlying_type<TIndex>, int>));

Constantine-Drozdov Автор вопроса
Stas
static_assert(std::is_same_v<TIndex, int> || ...

и почему бы это не UB?

Constantine-Drozdov Автор вопроса
Constantine-Drozdov Автор вопроса
Stas
почему?

а почему есть?

Constantine Drozdov
а почему есть?

потому что std::is_enum_v<TIndex> &&

Constantine-Drozdov Автор вопроса

>Conjunction is short-circuiting

Constantine Drozdov
тут нет short circuit

А что, в стдлибе есть перегрузка оператора&& на бул?

Vlad
>Conjunction is short-circuiting

http://eel.is/c++draft/meta.logical#3 http://eel.is/c++draft/meta.logical#8

Vlad
http://eel.is/c++draft/meta.logical#3 http://eel.i...

Там std::underlying_type_t<TIndex>, оно инстанцируется сразу вне зависимости от чего бы то ни было

Constantine-Drozdov Автор вопроса

https://godbolt.org/z/bnqheofKz в любом случае не работает даже так

В общем, проще написать свой ленивый трейт для этого В общем, проще написать свой ленивый is_same по аналогии с disjunction/conjunction, который принимает не типы, а врапперы с алиасом type Кажется, первый предложенный вариант не сработает

Constantine-Drozdov Автор вопроса
Ofee Oficsu
В общем, проще написать свой ленивый трейт для это...

Можно наверное constexpr функцию через зависимости потаскать

Constantine Drozdov
https://godbolt.org/z/bnqheofKz в любом случае не ...

ну тогда остаётся сфинай template<typename T, class Enable = void> struct is_uint32_enum : std::false_type {}; template<typename T> struct is_uint32_enum<T, std::enable_if_t<std::is_enum_v<T>>> { enum { value = std::is_same_v<std::underlying_type_t<T>, uint32_t> }; };

Constantine-Drozdov Автор вопроса
Constantine-Drozdov Автор вопроса
Andrey Davydov
https://godbolt.org/z/hcsaxKPvY

понял, круто, спасибо

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

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

читать файл максимально быстро? странный вопрос))
zamtmn
53
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
Приветствуем всех! Устали без проектов? Если вы программист и хотите получать стабильные заказы, компания Elif предлагает вам недельный курс по поиску проектов и их ведению. ...
Elif
1
А чего сейчас в моде вместо Error для эксепшенов? А то я тут внезапно узрел что он не рекомендуется :) У Try::Tiny какой-то совершенно ужасный синтаксис если надо конкретные э...
Denis F
19
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Привет. Сразу скажу, что на C/C++/Rust я не пишу, но тем не менее возникла потребность дебага C/C++/Rust кода. Суть: есть серверное приложение, которое периодически ведёт себ...
ninekeem 🐳
4
всем привет! углубившись в плюсы и начав изучать реверсинг понял, что без асм'а никуда со своими высокоабстрактными представлениями начал изучать механизмы асма, и не совсем п...
9
Всем привет, после Си стоит учить плюсы или лучше на раст перейти?
Linus
8
или вы считаете муит дает знание?
супер_лох_3000 альфа версия
12
значить например он учился в СДУ то получается он особенный?)
Asets Serikov
11
Карта сайта