= 0;
template <size_t first, size_t... other>
constexpr size_t sum<first, other...> = first + sum<other...>;
template <class... Types>
constexpr size_t sum_sizeof = sum<sizeof(Types)...>;
// Проверка:
static_assert(sum_sizeof<int, bool, char> == sizeof(int) + sizeof(bool) + sizeof(char));
я так понял что сначала попадаем в template <class... Types>, но потом что?
Потом для каждого класса берётся размер и складывается через sum
по идее он же только у 1 типа передает размер а остальные точно такие же параметры и должен снова попасть в template <class... Types>
sizeof(Types)... - это обработка вариадик пака целиком
В общем, template < typename... Ts > constexpr auto sum_sizeof{(sizeof(Ts) + ...)}; Edit: (C++17)
Такое из нового ещё и должно быстрее компилироваться, потому что меньше шаблонов инстанцируется, так что лучше применять из нового.
в такой же последовательности?
Обратную можно получить обратным же синтаксисом: (... + x).
Уточню: (expr op ...) - это правая ассоциативность (a op (b op c)), а (... op expr) - левая (a op b) op c.
Обсуждают сегодня