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

Привет. А есть какие-то причины не заменять все ифы внутри

consteval контекста на if constexpr? Или так делается?

14 ответов

19 просмотров

static_assert сломается?

Vanya-Khodor Автор вопроса

consteval void f(int i) { if (i); } Здесь нельзя заменить на if constexpr, потому что

Ну для consteval да, кажется противоестественным

Maks
Ну для consteval да, кажется противоестественным

Сделали так, как есть, чтобы не было например следующей ситуации: decltype(f(1)) != decltype(f(2))

Maks
Ну для consteval да, кажется противоестественным

Я видел уже несколько объяснений этой логики в этом и procxx чатах

Alexander Karaev
Я видел уже несколько объяснений этой логики в это...

@oficsu , возможно у тебя под рукой есть ссылка на твоё объяснение

Alexander Karaev
Я видел уже несколько объяснений этой логики в это...

Спасибо, попробую погрепать по чатам, если что

Maks
Ну для consteval да, кажется противоестественным

Всё дело вот в чём. Представим такую функцию: consteval auto f(int i) { if constexpr (i == 42) { return Foo{}; } else { return Bar{}; } } Она, как мы видим, не шаблон. Какой тип вернёт decltype(f)? Как с ней работать теперь, когда даже std::invoke_result сломан?

Vanya-Khodor Автор вопроса
Ofee Oficsu
Всё дело вот в чём. Представим такую функцию: con...

А. То есть параметр в отличие от шаблона не создаёт отдельную сущность, потому запретили?

Vanya Khodor
А. То есть параметр в отличие от шаблона не создаё...

Да, мы в принципе можем сделать сейчас что-то такое в unevaluated context: decltype(f(std::declval<int>())) Идея в том, что все инты одинаковы, а потому мы можем судить о свойствах функции без конкретного значения. Это вообще одна из основ языка. Но если consteval... Без сомнения, так можно сделать, но, вероятно, к вопросу, что ломать, а что нет, стоит подойти позже и более сознательно Да и дело не в том, что запретили, а в том, что для того, чтобы разрешить такое поведение, потребуется много чего добавить или изменить в стандарте

Ofee Oficsu
Да, мы в принципе можем сделать сейчас что-то тако...

а никто не делал пропозал чтобы эта идея была высечена в камне (чтобы можно было следить)?

Maks
а никто не делал пропозал чтобы эта идея была высе...

Есть пропозалы по рефлексии, которые в качестве примеров приводили код, который именно так и должен работать по смыслу: consteval void f(std::meta::info i) requires std::meta::is_class(i) { /* ... */ } Но никакой формализации или вординга там не было. Более того, было решение в следующих бумагах по рефлексии так не делать

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта