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

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

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

14 ответов

4 просмотра

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) { /* ... */ } Но никакой формализации или вординга там не было. Более того, было решение в следующих бумагах по рефлексии так не делать

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

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

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
читать файл максимально быстро? странный вопрос))
zamtmn
53
How to create an OS in C? what to study?
Linus
18
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
5
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Кто может подсказать? Я преобрпзовал изображение в бинарное(у меня установлен трекбар который при установленном значении меняет пиксели на белый если меньше и чёрный если боль...
Константин VS
6
Карта сайта