Pull to refresh
16
0

Пользователь

Send message

Один бокс потенциально есть внутри

std::io::Error

Макрос тоже есть в первой строчки вашего снипетта ;) Но писать эти строки с From обычно лень и берут `thiserror` макрос.

Если нет возможности использовать слайсы, то ваш реальный код таки сильно отличаются от этого примера :) Но то что на таком примитивном коде он не оптимизировал это печаль и беда.

А в других языках стандарта попросту нет, и malloc они используют в конечном итогое тоже из си. Получается безвыходная ситуация - ни одной корректной программы под линукс написать нельзя.

В последних двух ваших примерах (раст и С++) проверки компилятор не "убирает" - их просто там изначально нету.

Добавлено: А в первом примере кстати логика поменялась. Там у автора был что если `count == data.len()` то всё равно вернуть ноль. Не знаю специально или случайно.

Интересно почему, полное расследование ). Это вообще опенсурс проект, раз там какой то IRC?

Не все примеры тривиальные. В том коде чуть по-другому ошибка появляется.

древнючий буст и весь легаси пример я конечно не хочу заводить, но `-fsanitize=address` обычно отлавливает висячие ссылки на локальные переменные.

что malloc и linux kernel не существует? =)

Написать линт для clang-tidy - что is_constant_evaluated только внутри if (...).

Сомневаюсь что механизм перегрузок в С++ проще (с точки зрения потенциальных ошибок) одного ифа.

Что значит "вдруг" начнет возвращать не то?
предлагаете рефакторинг в результате которого стало что-то типа такого:

bool ce = std::is_constant_evaluated();
if (ce) { ... } else { ... }

т.е. вынесли ce в отдельную переменную? В этом плане if consteval более эрогономичный. А если кто-то реализовал на основе него std::is_constant_evaluated то это на самом деле плохая идея, потому что ответ в кт и рт должен совпадать.

PS Новый редактор хабра вообще отбивает желание сюда писать :(

Согласен. Писать два вида чисел, как предлает человек выше - это писать в два раза больше кода на каждый такой if и комбинаторный взрыв в результате.

Я про `if consteval` из C++23. Т.е. вот автор предлагает делать две функции и перегрузку по constexpr модифиактору. Я спросил, чем эта перегрузка отличается от if consteval внутри одной функции. Например одно отличие, что можно было бы добавлять перегрузки отдельно. В любом случае constexpr уже заняли больше 10 лет назад для другой цели.

автор хотел как в js скорее всего

Очевидно почему так плохо - придется два варианта писать для всех constexpr функций которые ее используют.

Чем отличается от if consteval внутри тела функции?

Да, ответ менять не надо - надо менять реализацию. Вам хочется поднять его на уровень типов, кажется что такая возможность только добавит непонятных моментов в коде. Тогда ваш рефакторинг а ля вынесли константу в новую переменную не просто поменяет true на false, а может поменять int на float.

В hpp файлах часто темплейты, и их надо разбирать при инстанциировании с новыми темплейт аргументами, и следовательно компилировать заново.

Вполне закономерно. Вы везде пытались поменять ответ в зависимости от const_evaluated. А он предназначен для противоположной цели. И там вполне ясно сказано что тестируется выражение содержащие is_const_evaluated() а не функция в которой содержится эта инструкция. Пример с тренарником интереснее, но про него есть в документации.

на сppreference всё логично описано.

Information

Rating
Does not participate
Registered
Activity