Информация об изменениях

Сообщение Re[4]: static_assert в catch секции от 23.12.2024 15:35

Изменено 23.12.2024 15:36 Videoman

Re[4]: static_assert в catch секции
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Нынче считается, что это способствует ясности изложения кода?


А причем тут ясность? Тут необходимость просто:
#include <type_traits>
#include <optional>

int func_runtime()
{
    // use intrinsics, threads or other staff 

    throw int();
}

constexpr int func_constexpr() noexcept
{
    // no optimization

    return 0;
}

constexpr int func() noexcept
{
    if (std::is_constant_evaluated())
        return func_constexpr();
    else {
        try {
            return func_constexpr();
        } catch (...) {
            return 0;
        }
    }
}

int main()
{
    constexpr int value1 = func();
    int value2 = func();

    return value1 + value2;
}


Иногда в для того, что бы код работал в runtime`е быстро, там приходится использовать низкоуровневые возможности, а constexpr не позволяет такое миксовать. Теперь можно писать код, которые будет работать и в том и в том режиме.
Re[4]: static_assert в catch секции
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Нынче считается, что это способствует ясности изложения кода?


А причем тут ясность? Тут необходимость просто:
#include <type_traits>
#include <optional>

int func_runtime()
{
    // use intrinsics, threads or other staff 

    throw int();
}

constexpr int func_constexpr() noexcept
{
    // no optimization

    return 0;
}

constexpr int func() noexcept
{
    if (std::is_constant_evaluated())
        return func_constexpr();
    else {
        try {
            return func_runtime();
        } catch (...) {
            return 0;
        }
    }
}

int main()
{
    constexpr int value1 = func();
    int value2 = func();

    return value1 + value2;
}


Иногда в для того, что бы код работал в runtime`е быстро, там приходится использовать низкоуровневые возможности, а constexpr не позволяет такое миксовать. Теперь можно писать код, которые будет работать и в том и в том режиме.