Метапрограммирование, щадящее компилятор
Метапрограммирование, щадящее компилятор, Андрей Давыдов Любой окунувшийся в мир C++ программист знает, что шаблоны тьюринг-полные, substitution failure is not an error, и в compile-time можно делать удивительные, а иногда даже полезные вещи. С другой стороны опытный С++ разработчик понимает, что можно не значит нужно, и что за злоупотребление метапрограммированием приходится платить. Один из основных сдерживающих факторов – время компиляции, и именно его оптимизации посвящен данный доклад. Некоторое (не исчерпывающее) множество вопросов, которое будет рассмотрено: какие операции наиболее дорогие с точки зрения времени компиляции, и как их можно избегать; почему std::conditional_t определен неэффективно; в чем разница между реализациями tuple в Microsoft STL и libc++; когда стоит использовать std::{conjunction,disjunction}, а когда fold expressions; почему не стоит использовать std::void_t (да-да, чтобы там не говорили эксперты на многочисленных конференциях!); как появляющиеся в C++20 концепты могут помочь; ... Если вы знаете ответы на все эти вопросы, доклад вряд ли будет вам полезен/интересен. Иначе – добро пожаловать. Никаких специальных знаний не требуется, но ожидается, что терминами SFINAE, template specialization, template arguments deduction, tag dispatching, variadic templates, fold expressions, ... вас не напугать. Слайды: https://drive.google.com/file/d/1BQ2k...
Доклад представлен на встрече St. Petersburg C++ User Group, 15.11.2018