Что выведет код Middle Шаблоны и концепты обновлено

Что выведет: sizeof..., fold и статический член шаблона

Вопрос

Что выведет программа (C++20, g++ 14)? Каждый вывод с новой строки, как в консоли.

#include <cstddef>
#include <iostream>

template <class... Ts>
constexpr std::size_t count() { return sizeof...(Ts); }

template <class... Ts>
auto sum(Ts... xs) { return (xs + ... + 0); }

template <class T>
struct Box { static inline int n = 0; };

int main() {
    std::cout << count<int, double, char>() << '\n';
    std::cout << sum(1, 2, 3) << ' ' << sum() << '\n';
    Box<int>::n++;
    Box<int>::n++;
    Box<double>::n++;
    std::cout << Box<int>::n << Box<double>::n << '\n';
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: 3, 6 0, 21. sizeof... считает типы в пачке: 3.

Что выведет

3
6 0
21

Разбор

sizeof... считает типы в пачке: 3. Свёртка с начальным значением 0 даёт 6, а для пустой пачки 0. Box<int> и Box<double> разные классы, у каждого своя статическая переменная: 2 и 1, печатаются подряд.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.