Отладка во время компиляции в C++

Согласно максиме constexpr everything и с введением consteval в C++20 все больше и больше кода оценивается во время компиляции.

Это приводит к очевидному вопросу: как это отладить?

Единственные подсказки в настоящее время - это ошибки компилятора. Но что, если код компилируется, но все равно не выполняет ожидаемых действий. Есть ли какие-нибудь инструменты, которые могут в этом помочь? Любые возможности проверки?

Связанный с этим вопрос: как узнать, какие из них действительно будут "выполнены" во время компиляции, а какие останутся во время выполнения, несмотря на квалификатор.

0 ответов

Я лично использую static_assert в качестве отладчика для функций constexpr, это не лучший инструмент, но он может заменить такой код, как if (irational_value) cout<<"bug";Глупый пример для оценки во время компиляции, действительно ли 6-е число Фибоначи равно 13.

#include <vector>
#include <iostream>

int main(){
    constexpr unsigned sixth_fib=[](){
        unsigned prev=1;
        unsigned sum=1;
        for (unsigned i=0;i<5;i++)
        {
            auto tmp=sum;
            sum+=prev;
            prev=tmp;

        }
        return sum;
    }();
    static_assert(sixth_fib==13);
    std::cout<<sixth_fib<<std::endl;

}
Другие вопросы по тегам