Я понял вот какую фишку.
Многие думают что C++ только один. На самом деле их два: обычный C++ и C++ времени компиляции. Совершенно разные языки, но есть кое-что общее.
Вот, к примеру, есть такая функция:
template <int N>
constexpr int factorial() {
if (N <= 1)
return 1;
else
return N* factorial<N - 1>();
}
Пробую VS последней версии и последний стандарт C++.
Что скажете? Думаете проканает для режима компиляции? А хрена с два — пишет что функция слишком сложная. А вот так уже проканало:
template <int N>
constexpr int factorial() {
if (N <= 1)
return 1;
else
return 2;
}
Т.е. предкомпилятор довольно ограничен, но не ясно насколько и различается ли он для разных компиляторов (препроцессоров?).
Что интересно, если функция не constexpr — то if/else вообще будут проигноированы. Но как?
Вопрос такой. Есть ли краткая статья, ликбез, где бы рассматривалось зачем все это нужно и как его использовать?