Шаблоны против статической рефлексии в C++: пять операций, две реализации и дедупликация, которая не стоит памяти
<img src="https://habrastorage.org/getpro/habr/upload_files/c79/3e1/b2d/c793e1b2d4f562159000a9356010da11.png" /><p>Одна и та же операция — дедупликация списка типов — написана двумя способами: на шаблонах и на статической рефлексии из C++26. Обе реализации живут в одном дереве и проверены на идентичность результата, поэтому их можно честно вычесть друг из друга. Получилось так: шаблонная версия съедает 7,9 ГиБ памяти компилятора там, где рефлексивная не съедает ничего измеримого — ±21 МиБ на 32-кратном диапазоне размеров. А по времени обе квадратичны, и рефлексия выигрывает всего пятую часть. Разбираю, откуда берётся такая асимметрия, и заодно пять компиляторных стен, в которые упираешься по дороге, — включая sizeof…, который молча возвращает неверное число.</p> <a href="https://habr.com/ru/articles/1079828/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1079828#habracut">Читать далее</a>
