Несколько новых возможностей C++17 позволяют написать более компактный и ясный код. Это особенно важно при шаблонном мета-программировании, результат которого часто выглядит жутко…
Например если вы хотите выразить if
, который вычисляется во время компиляции, вы будете вынуждены написать код используя приём SFINAE (например enable_if
) или статическую диспетчеризацию (tag dispatching). Такие выражения тяжело понять, и они выглядят как магия для разработчиков, незнакомых с продвинутыми шаблонами мета-программирования.
К счастью, с появлением C++17 мы получаем if constexpr
. Теперь большинство приёмов SFINAE и статической диспетчеризации отпадает, и код уменьшается, становится похожим на "обычный" if
.
Эта статься демонстрирует несколько приёмов использования if constexpr
.