Посмотрите на следующий код, который, очевидно, и GCC, и Clang рады принять: [ coliru ]:
template <class ... P1, class T1, class ... P2, class T2, class ... P3>
constexpr int f(T1, T2) {
return sizeof...(P1) + sizeof...(P2) + sizeof...(P3);
}
int main() {
static_assert(f(12, 3.4) == 0);
}
Почему это компилируется? Есть ли в стандарте правило, гласящее, что когда пакет параметров шаблона не может быть выведен, он считается пустым?