Чернигин Алексей рассказывает о метапрограммировании на примере Boost.Geometry.
- Предыстория
 - Необходимые геометрические примитивы
 - Необходимые геометрические алгоритмы
 - Требования на библиотеку
 - Существующие альтернативы
 - А что, если мы разрабатываем не приложение, а библиотеку?
 - Требования на библиотеку
 - Суровая правда жизни, или как выглядит типичная интеграция со сторонней библиотекой
 - Пример интеграции с GEOS
 - Пример интеграции с GEOS
 - Проблемы с производительностью
 - можно ли по-другому?
 - Нам нужна магия generic!
 - Расстояние между двумя точками struct Point
 - Добавляем шаблоны
 - Надо сделать generic access
 - Generic access
 - Применим к GeoPoint namespace boost
 - О метафункции
 - Обобщаем размерность
 - Эволюция функции distance namespace boost::geometry
 - Рекурсивное инстанцирование
 - Промежуточные результаты
 - Концепция Point
 - Адаптация GeoPoint для концепции точки namespace boost::geometry::traits
 - Концепция LineString
 - Адаптация Polyline namespace boost
 - Что в итоге
 - Добавляем геометрические примитивы
 - Есть 2 решения
 - Концепция Point (финальная)
 - Адаптация концепции точки
 - Tag dispatching
 - Возможности tag dispatching by type
 - Добавляем геометрические примитивы
 - Определим тип точки для геометрий
 - Переопределим dimension
 - Переопределим систему координат
 - Реверсивный порядок аргументов
 - Изменяем distance namespace boost::geometry::dispatch
 - Результаты