Метапрограммирование, щадящее компилятор

День 2 /  / Зал 1  /  RU / Хардкор. Сложный низкоуровневый доклад, требующий от слушателя знаний технологии.

Любой окунувшийся в мир C++ программист знает, что шаблоны тьюринг-полные, substitution failure is not an error, и в compile-time можно делать удивительные, а иногда даже полезные вещи. С другой стороны, опытный С++ разработчик понимает, что можно — не значит нужно и что за злоупотребление метапрограммированием приходится платить. Один из основных сдерживающих факторов — время компиляции, поэтому мы рассмотрим, какие операции/техники наиболее дороги с точки зрения компилятора и как их можно избегать.

В частности, будут освещены следующие вопросы:

  • почему SFINAE — это последнее, что нужно использовать;
  • почему std::conditional_t определен неэффективно;
  • в чем разница между реализациями tuple в Microsoft STL и libc++;
  • когда стоит использовать std::{conjunction,disjunction}, а когда — fold expressions;
  • почему не стоит использовать std::void_t;
  • как появляющиеся в C++20 концепты могут помочь.

Наши контакты