Здравствуйте, vsb, Вы писали:
vsb>Лично я считаю, что код времени компиляции в общем случае это плохо.
Только то убожество, до которого довели современный C++. Я уже много раз писал (последний раз —
здесьАвтор: Евгений Музыченко
Дата: 09.01.22
), что сама идея и макросов, и шаблонов сама по себе не предполагает непременно функционального принципа обработки. Она может быть и процедурно-функциональной, и даже чисто процедурной, где проблем с пониманием логики работы и отладкой почти не возникает, а объем и сложность кода, генерируемого на этапе компиляции, могут быть гораздо выше (те же разнообразные таблицы).
vsb>Тот же static assert идеален там, где и без него вылезет ошибка.
Это как? Вот есть, например, enum с набором констант, и есть таблицы, которые этими константами индексируются. Если не ставить возле каждой таблицы конструкцию вроде static_assert (LengthOfArray (Table) == Enum::Total), то где именно "вылезет ошибка"?
vsb>Если хочется делать что-то сложное до компиляции, то надо генерировать исходный код. Т.е. написать отдельную программу, которая будет генерировать код.
Именно это и делается в C++, только для написания "отдельной программы" предлагается настолько жуткий встроенный язык, что часто действительно оказывается проще использовать другой.
vsb>То, что что-то можно сделать, не означает, что это нужно делать.
Увы, парадигма C++ уже давно от этого ушла.