Автор сравнил скорость компиляции реализации преобразования enum в строку через три подхода: стандартную рефлексию C++26 с использованием библиотеки meta, макросы x-macro и сторонний проект enchantum. В качестве инструмента использовался официально выпущенный GCC 16.1.1, а тесты проводились на машине с процессором Core i9-13900K в Fedora 44.
Базовый бенчмарк показал, что простая компиляция без лишних заголовков занимает около 25,7 мс. Добавление макроса x-macro увеличало время всего на 0,9–29 мс в зависимости от количества значений. Сторонняя библиотека enchantum отняла дополнительно 136 мс за просто факт inclusion файла, а встроенная библиотека std::meta стоила почти 155 мс. Сам алгоритм преобразования через рефлексию работает быстро: около 0,07 мс на каждое значение enum, что сопоставимо с ручным switch в макросах. Однако цена импорта мета-библиотеки полностью перекрывает выигрыш алгоритма.
Проект enchantum при этом имеет странное поведение: он не зависит от размера enum, а сканирует всю заранее заданную конфигурационную область. Поэтому с ростом N скорость падает медленнее, чем у других методов. Автор предположил, что для N=1024 пришлось расширить диапазон сканирования, что замедлило работу всей программы. Использование предкомпиленного заголовка (PCH) позволило сократить время компиляции варианта с мета на 2,3 раза, сделав рефлексию самым быстрым способом. Модули C++20 в текущей версии GCC дали обратный эффект — время выросло еще на 2,2 раза.
В большом проекте с 500 файлов компиляция всех переводных единиц превращается в минуты. Если каждый заголовок с мета добавляет полсекунды, десятки таких файлов заставят ждать сборки по 10 минут. Уменьшить влияние заголовков можно, не втягивая их в другие файлы, а добавляя только туда, где они нужны. Макросы x-macro остаются самыми быстрыми, но выглядят некрасиво. Авторов закрывает, что пока мета не станет легче или модули не ускорятся, лучше использовать x-macro или enchantum для публичных библиотек. Встроенная поддержка рефлексии в C++26 выглядит многообещающей, но требует осторожности при использовании в крупных базах.