В качестве эксперимента я просто собрал код для генерации std::array<uint32_t, 256>
во время компиляции. Содержимое таблицы является довольно типичной таблицей поиска CRC - о новой новее относится использование функций constexpr
для расчета записей, а не для размещения автоматически генерируемой таблицы магии непосредственно в исходном коде.Практические ограничения на количество вычислений constexpr
В любом случае, это упражнение вызвало у меня любопытство: были ли какие-либо практические ограничения на количество вычислений, которые компилятор хотел бы сделать, чтобы оценить функцию или определение переменной во время компиляции? например что-то вроде параметра gcc -ftemplate-depth
, создающего практические ограничения на количество оценки метапрограммирования шаблона. (Я также интересно, если там могут быть практические ограничения на длину параметра пакета - который будет ограничивать размер во время компиляции std::array
, созданный с использованием std::integer_sequence
промежуточного объекта.)
Если я правильно помню, да, есть предел, но он должен быть на порядки больше рекурсивного предел реализации. – MikeMB