Этот шаблон вычисляет при компиляции такое:
rbv<false, false, true, true>() = 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.