Вот вроде бы все так безобидно начиналось — макросы. Ну это же, можно сказать, почти тупая замена текста. Ну ОК, добавили параметры макроса, это чуть более сложная замена текста.
А сейчас что? Шаблоны, 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 не смог ответить правильно скомпилируется ли программа и почему. А может это еще и зависит от...
А вы сможете? Как вы это поймете? Просто догадаться нужно? А если кода сотни строк времени компиляции?