Pull to refresh
16
0

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

Send message

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

древнючий буст и весь легаси пример я конечно не хочу заводить, но `-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 всё логично описано.

Т.е. он не делает разницы для constexpr и нет функций на этапе оптимизаций?

потому что this-> никогда не был обязательным

Но если такой предел пробовать для всех функций, то это займет больше времени, чем только для constexpr. Хотя пропагирование констант работает и для обычных функций часто, без пометки constexpr.

Пробовать вычислить любую функцию в constexpr может быть проблематично, если ее вычисление занимает много времени, или вообще не известно завершима ли она. Что компиляторы должны делать в таком случае? И что они делают сейчас интересно.

Кажется это называется постмодернизм в философии. Когда предсказание о том какой студент будет хорош, влияет на восприятие его работ обществом. И если он хоть как-то нормально умеет рисовать (а красиво рисовать это отчасти вполне инженерного плана ремесло), то у него есть все шансы стать следущим Пикассо.

Information

Rating
5,124-th
Registered
Activity