C++ времени компиляции - как отлаживать?
От: Shmj Ниоткуда  
Дата: 07.07.23 01:24
Оценка: :))
Вот вроде бы все так безобидно начиналось — макросы. Ну это же, можно сказать, почти тупая замена текста. Ну ОК, добавили параметры макроса, это чуть более сложная замена текста.

А сейчас что? Шаблоны, constexpr и иже с ними — это фактически урезанный C++ поверх C++

Но, простите, как это отлаживать? Если обычный С++ можно в дебагере пройтись по шагам и все станет ясно — то тут мы просто имеем ошибку без всякой возможности понять причину ее возникновения (окромя как догадаться).

Вот, для примера:

template <class T1>
struct TestStruct1
{
    constexpr TestStruct1()
    {
        constexpr int a = sizeof(T1) + 1;
        constexpr int b = sizeof(T1);

        if (a < b)
            static_assert(sizeof(T1) != a - 1, "Error 1");
    }
};

int main()
{
    TestStruct1<short> t;
}


Тот же GPT не смог ответить правильно скомпилируется ли программа и почему. А может это еще и зависит от...

А вы сможете? Как вы это поймете? Просто догадаться нужно? А если кода сотни строк времени компиляции?
Отредактировано 07.07.2023 1:35 Shmj . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.