Variadic template c++?
Этот шаблон вычисляет при компиляции такое:
rbv() = 11002.
И состоит из двух частей.
1. Для одного параметра у нас напрямую написан шаблон.
2. Для false, false, true, true — у нас используется второй шаблон: a=false, b=false, d = (true, true).
И он равняется (rbv<false, true, true> << 1) + false.
Чтобы вычислить новый rbv, снова работает второй шаблон: a = false, b = true, d = (true).
И он равняется (rbv<true, true> << 1) + false.
Для третьего rbv у нас a = true, b = true, d = ().Внимание, список d может быть и пусттым. Потому, чтобы не было конфликта с первым шаблоном, второй пишется для двух и более параметров.
И третье наше значение равняется (rbv<true> << 1) + true.
Вот тут работает первый шаблон и получается 112.
Дальше уже можно вычислить все rbv по очереди и получить 11002.
Этакая рекурсия на этапе компиляции. Например, изначально шаблон специфицирован n параметрами (... как раз подразумевает неизвестное количество параметров). Если n==1, то выбирается первая функция, и результат возвращается сразу. Иначе n > 1 и выбирается вторая функция. Все параметры шаблона разбиваются по принципу параметр 1, параметр 2, всё, что осталось. Параметр 2(b) нужен в этом случае для того, чтобы не произошло конфликта при n == 1. Далее шаблон снова специфицируется, уже меньшим количеством параметров. По индукции получаем конечность этого процесса.
В современном С++ не силён, так что в терминах могут быть ошибки.