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

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

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

14 ответов

16 просмотров

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта